一、JavaScript知识点
- 异步编程和同步编程
// synchronous [solidity]
// asynchronous [javascript]
// cooking
// Synchronous
// 1. Put popcorn in microwave -> Promise
// 2. Wait for popcorn to finish
// 3. Pour drinks for everyone
// Asynchronous
// 1. Put popcorn in the mircrowave
// 2. Pour drinks for everyone
// 3. Wait for popcorn to finish
// Promise:Pending,Fulfilled,Rejected
如果不使用异步编程,在它还没有部署好的时候就尝试运行合约上的代码,那肯定是行不通的
function main() {
console.log("hi");
let variable = 5;
console.log(variable);
//deploy a contract? Wait for it to be deployed
//contract.deploy部署函数 -> wouldn't wait for it to finish
//如果不使用异步编程,在它还没有部署好的时候就尝试运行合约上的代码,那肯定是行不通的
}
//变成异步
asyns function main() {
console.log("hi");
let variable = 5;
console.log(variable);
}
main()
.then(() => process.exit(0))//用于等待它完成并打印其中的错误
.catch((error) => {
console.error(error)
process.exit(1)
});
编译solidity
solc-js:直接安装项目到我们的配置和文件夹中;因为它有一种方法能编译通过相对路径导入其他合约的合约
To compile a contract that imports other contracts via relative paths:
solcjs --bin --include-path node_modules/ --base-path . MainContract.sol
>yarn add solc
>yarn add solc@0.8.7-fixed
前提安装:node,npm,corepack,yarn管理
now,有了solc就能够编译我们的合约了;
减少命令长度:package.json
“scripts”:{“compile”:“xx”}
变成yarn compile
“scripts”是一种实用方法,让我们轻松运行长命令。
二、智能合约
那么什么是智能合约呢?以太坊网络上运行程序就称之为智能合约, 它和其他的程序一样,也是代码和数据(状态)的集合。即:将法律条文写成可执行代码。让法律条文的执行中立化,这个理念和区块链上的程序可以不被篡改、不被干预(只有有人触发交易,它将自动执行)的执行不谋而合,因此区块链引入了这个概念。
智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。
目前除数字货币之外,真正落地的应用还不多。
Solidity
是一门编译型语言,代码被编译为以太坊虚拟机字节码之后,再部署到以太坊网络。Remix 就是用来开发、编译、部署智能合约的IDE,它还是一个基于浏览器的Web IDE。(实际如何应用 还有待学习)
运行环境:EVM
EVM(Ethereum Virtual Machine)以太坊虚拟机 用来执行以太坊上的交易,提供智能合约的运行环境。而EVM运行在以太坊节点上,当我们把合约部署到以太坊网络上之后,合约就可以在以太坊网络中运行了。
合约的编译
以太坊虚拟机上运行的是合约的字节码形式,需要我们在部署之前先对合约进行编译,可以选择Remix 或solc编译器。
以太坊客户端(钱包)
以太坊客户端,其实我们可以把它理解为一个开发者工具,它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能。(EVM是由以太坊客户端提供的)
Geth是典型的开发以太坊时使用的客户端,基于Go语言开发。 Geth
提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。
如何部署
智能合约的部署是指把合约字节码发布到区块链上,并使用一个特定的地址来标示这个合约,这个地址称为合约账户。将编译好的合约字节码通过外部账号发送交易的形式部署到以太坊区块链上(由实际矿工出块之后,才真正部署成功)。
运行
合约部署之后,当需要调用这个智能合约的方法时只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在EVM中执行了。
Gas
和云计算相似,占用区块链的资源(不管是简单的转账交易,还是合约的部署和执行)同样需要付出相应的费用。
Gas 的目的是限制执行交易所需的工作量,同时为执行支付费用。(如果没有这个限制,就会有人写出无法停止(如:死循环)的合约来阻塞网络。)
因此实际上我们需要一个有以太币余额的外部账户,来发起一个交易(普通交易或部署、运行一个合约),运行时,矿工收取相应的工作量费用。
!!没有以太币,要怎么进行智能合约的开发?可以选择以下方式:
-
选择以太坊官网测试网络Testnet
-
使用私有链---->Geth
-
使用开发者网络(模式) ---->自动分配一个有大量余额的开发者账户
-
使用模拟环境 ---->Ganache
另一个创建测试网络的方法是使用Ganache,Ganache是普通的应用程序,它在本地使用内存模拟的一个以太坊区块链环境,对于开发调试来说,更方便快捷。而且Ganache会在启动时帮我们创建10个存有资金的测试账户。
进行合约开发时,可以在Ganache中测试通过后,再部署到Geth节点中去。
DApp:去中心化的应用程序
以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App)
Truffle
Truffle是一个非常流行 DApp 开发框架,他可以帮我们处理掉大量无关紧要的小事情,让我们可以迅速开始写代码-编译-部署-测试-打包DApp这个流程。Truffle
ps:待定学truffle
三、搭建智能合约开发环境Remix IDE及使用
如何在本地搭建智能合约开发环境remix-ide并介绍Remix的使用。
Remix 是以太坊智能合约编程语言Solidity IDE
成功安装选择对应的版本很关键,具体的版本要求如下:
$ node --version
v7.10.1
$ npm --version
4.2.0
$ nvm --version
0.33.11
nvm 安装
nvm 是一个node 版本工具,我们可以使用nvm来安装不同版本的node。
nvm 官方安装方法如下:
-
命令行中输入:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
-
在当前用户profile文件,如(~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrc)添加加载nvm的脚本:
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
-
重启下命令行,输入nvm 试试,应该可以看到 nvm 命令的帮助
因为Remix IDE 要求使用node 7.10.1, 命令行输入一下命令进行安装:
nvm install 7
安装完成之后,使用node --version 和 npm --version检查下版本号,是否和刚刚列出版本要求一致
强烈建议新手使用Remix -Solidity IDE来进行开发。