Solidity 入门教程Solidity 是什么
Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。
Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。
开发工具Remixremix是以太坊官方推荐的智能合约开发IDE(集成开发环境),适合新手,可以在浏览器中快速部署测试智能合约,你不需要在本地安装任何程序。
网址:remix.ethereum.org
进入remix,我们可以看到最左边的菜单有三个按钮,分别对应文件(写代码的地方),编译(跑代码),部署(部署到链上)。我们点新建(Create New File)按钮,就可以创建一个空白的solidity合约
我们来编写一段代码
1234567// SPDX-License-Identifier: MIT // 不写这个编辑器会警告,但是不影响运行pragma solidity ^0.8.0; // 指定编译器版本 不允许小于 0.8.0 或大于 0.9.0的编译器 ...
什么是 CypressCypress 是一个现代化的前端端到端(End-to-End,E2E)测试框架。它被设计用于对 Web 应用程序进行自动化测试,可以模拟用户在真实环境中与应用程序的交互行为。
以下是 Cypress 的一些关键特点和优势:
简单易用: Cypress 具有简洁而直观的 API,使得编写和维护测试用例非常容易。
强大的调试能力: Cypress 提供了丰富的调试工具,开发人员可以通过断点、控制台日志和实时命令行等方式方便地调试测试用例。
可见即可信: Cypress 在测试过程中会记录并生成视频,可以可视化地查看每个测试用例的执行过程,方便回放和排查问题。
为什么要用 Cypress?
JavaScript 技术栈: Cypress 是以 JavaScript 为技术栈编写的,而我们团队 BCS 端都是使用 JavaScript 技术栈为主,切换为以 JavaScript 为主的自动化测试框架是一件低成本的事情。
简化测试流程: Cypress 提供了一个全面的测试解决方案,可以覆盖从用户界面到后端服务器的整个应用程序。它集成了测试框架、断言库和模拟工具,使得 ...
12345npm i lodash@npm:wuhu # 这样就把 lodash 的名称配置成了 wuhu# 实际使用一般来说 node-sass 是业界毒瘤,用 dart-sass 就可以替换掉 node-sassnpm install node-sass@npm:dart-sass# 如果你使用的是 yarnyarn add node-sass@yarn:dart-sass
什么是发布-订阅模式以我们使用过的 documeng.body.addEventListener(“click”,function(){}) 为例,这样的就是发布-订阅模式的具体实现。我们订阅了 documeng.body 上的 click 事件,当被点击的时候 body 节点便会向订阅者发布者消息。
如果用生活中的例子举例,那就是我们订阅微信公众号,公众号发送消息,订阅的用户就会接收到消息。
基于以上的例子,我们总结出发布订阅模式的三要素:
一个订阅者
一个发布者
一个处理 订阅和发布的中间人
接下来让我们来实现一个发布-订阅模式。我们规定 listen-订阅 trigger-发布 -remove 取消订阅
一个简单的发布订阅模式调用的形式如下:
123456salesOffices.listen(function (price) { console.log("价格", price);});salesOffices.trigger(100);salesOffices.remove(100);
具体实现如下:
12345678910111 ...
引入 cdnvue.config.js
12345678910111213141516171819202122232425262728293031323334353637const isProduction = process.env.NODE_ENV === "production";const cdn = { // 开发环境 dev: { css: [], js: [], }, // 生产环境 build: { css: ["//lib.baomitu.com/swiper/7.4.1/swiper-bundle.css"], js: [ "//lib.baomitu.com/vue/3.2.26/vue.cjs.js", "//lib.baomitu.com/vuex/4.0.0/vuex.cjs.min.js", "//lib.baomitu.com/vue-router/4.0.0/v ...
<script setup></script> 是一种编译时语法糖,用于在单文件组件中使用组合式 API,如果你同时使用单文件组件和组合式 API,建议使用该语法。
它与普通语法相比,代码更加简洁、性能更加强悍、更好的 TS 支持。
1npm install -g @vue/cli
1234567891011121314<script setup>// 此处代码将会被编译为 setup 函数代码// 也就是说此处代码将会在组件每次创建实例时执行// 在内部声明的顶级变量和函数都可以在模板中你直接使用const msg = "Hello Vue3 setup";function log() { console.log(msg);}</script><template> <div @click="log">{{ msg }}</div></template>
12345678910< ...
JavaScript
未读1.sleep 延迟函数1234567891011121314function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime() - start < delay) { continue; }}function test() { console.log("111"); sleep(2000); console.log("222");}test();
2.获取 URL 参数1234decodeURI("%E5%95%8A%E5%93%88%E5%93%88"); // 解码中文// window.location.search 获取 URL 参数let params = new URLSearchParams("?project=js&type=1").get("type");console.l ...
JavaScript
未读01.call, apply 和 bind 的区别call 的使用方式:123456789101112131415161718192021222324252627//#region call// 定义一个对象let character = { name: "派蒙", weapon: [], // 得到一把武器 getWeapon: function (weapon, weapon2) { this.weapon = [weapon, weapon2]; },};let character2 = { name: "行秋", weapon: [],};console.log(character);// 调用方法获取了一把护摩character.getWeapon("护摩", "薙草之稻光");console.log(character);// character2也想得到一把武器,但是没有这个方法获得.character1表示可以把 ...
Nuxt 是什么?Nuxt.js 是一个基于 Vue.js 的通用应用框架。
通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI 渲染。
我们的目标是创建一个灵活的应用框架,你可以基于它初始化新项目的基础结构代码,或者在已有 Node.js 项目中使用 Nuxt.js。
Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。
除此之外,我们还提供了一种命令叫:nuxt generate ,为基于 Vue.js 的应用提供生成对应的静态站点的功能。
我们相信这个命令所提供的功能,是向开发集成各种微服务(Microservices)的 Web 应用迈开的新一步。
作为框架,Nuxt.js 为 客户端/服务端 这种典型的应用架构模式提供了许多有用的特性,例如异步数据加载、中间件支持、布局支持等。
目录结构Nuxt.js 的默认应用目录架构提供了良好的代码分层结构,适用于开发或大或小的应用。当然,你也可以根据自己的偏好组织应用代码。
pages 目录Nuxt.js 会依据 pages 目录中的所有 *.vue 文件生成应用的路由 ...
什么是 hooks?Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。
我们先来看一个例子,这是传统的 class 组件的
12345678910111213141516171819import React from "react";class index extends React.component { state = { msg: "你好", }; updateMsg = () => { this.setState({ msg: "真好", }); }; render() { <div> <span>{this.state.msg}</span> <button onClick={this.updateMsg} ...