<100 subscribers
Share Dialog
Share Dialog
安装环境
迁移智能合约
编译智能合约
部署智能合约
方法一:contract factoty
准备 Provider, 用于和网络建立连接;
准备 Wallet, 用于签署交易;
创建 contract factory, 并提供 .abi, .bin 以及 Wallet 来获取实例。
通过 contract factory 的 deploy 方法,将合约部署至以太坊网络上。
方法二:raw transaction
将 transaction 用 raw 的形式 tx = {} 写出来。
使用钱包的 sendTransaction() 方法,为 tx 进行签名和发送。
td 交互智能合约
成功部署合约
准备阶段:
成功利用 ethers.js 中的 JsonRpcProvider, 建立连接起了程序和网络的连接,让程序和网络之间可以实现通讯;
成功利用 ehters.js 中的 Signer, 创建了用于签名交易的钱包 (wallet);
成功利用 Node.js 文件系统,导入了 .abi 接口文件以及 .bin 二进制文件,从而提供了合约的具体内容。
部署阶段:
成功利用 abi, bin 和 wallet 创建了 contract factory, 为部署合约提供了 initcode.
成功部署了 initcode, 并发送了 initcode transaction, 从而成功部署了合约。
成功确认了 initcode transaction, 并获得了交易收据。
含义:
Provider 是一种接口,它负责为钱包和网络建立起连接;
Wallet 是和以太坊账户相关的一种类,它负责使用私钥来对消息和交易进行签名。
作用:是合约部署准备过程的一部分:
准备 Provider 和 Wallet.
准备智能合约的 .bin 和 .abi 格式。
用法:
const provider = new ethers.providers.JsonRpcProvider(url);
const Wallet = new ethers.Wallet(privateKey, provider);
含义:
Character Encoding 是指字符编码,它定义了字节和文本之间的映射关系 (a mapping between bytes and text).
UTF-8 是最常用的字节和文本之间的映射关系。
关联:
每一串字节都可以根据不同的映射关系,被解释成为不同的文本,而 UTF-8 就是最常用的字符编码 (Character Encoding).
用法:
fs.readFileSync(path, "utf8");
概念:Contract Factory 是一种类,它负责用来创建合约。
原理:Contract Factory 可以在实例化后发送一种特殊的交易 (initcode transaction), 该交易的结果是一串代码,它会被部署为新的 contract.
应用:
async function deploy() {
const factory = new ethers.ConstractFactory(abi, bin, wallet);
const constract = await factory.deploy();
}
这里的 factory.deploy() 方法之前需要加 await 的原因是:根据 ehter.js 可以知道,该方法会返回一个 Promise< Constract >, 因此需要通过 async 和 await 来处理返回值 Promise。
如果既不不加 async 也不加 await, 那么在处理返回值 Promise 的时候,会由于不认识 .then() 方法而导致报错。
所以,如果要处理 Promise, 那么一定需要写上 async 和 await.
原理:
先运行 transaction factory 的 deploy() 方法,将 transaction factory 部署至以太坊网络上;
再运行 transaction factory 的deployTransaction() 方法,从而真正将智能合约部署在以太坊网络当中,并获得 transaction response;
最后,在以太坊网络响应了 transaction response 并经过区块确认交易后,会获得 transaction receipt,即我们在区块链浏览器上所看见的交易账单。
步骤:参考代码
1️⃣ 部署 Transaction Factory
const contract = factory.deploy();
2️⃣ 部署智能合约
constract.deployTransaction
3️⃣ resolve 交易收据
contract.deployTransaction.wait()
安装环境
迁移智能合约
编译智能合约
部署智能合约
方法一:contract factoty
准备 Provider, 用于和网络建立连接;
准备 Wallet, 用于签署交易;
创建 contract factory, 并提供 .abi, .bin 以及 Wallet 来获取实例。
通过 contract factory 的 deploy 方法,将合约部署至以太坊网络上。
方法二:raw transaction
将 transaction 用 raw 的形式 tx = {} 写出来。
使用钱包的 sendTransaction() 方法,为 tx 进行签名和发送。
td 交互智能合约
成功部署合约
准备阶段:
成功利用 ethers.js 中的 JsonRpcProvider, 建立连接起了程序和网络的连接,让程序和网络之间可以实现通讯;
成功利用 ehters.js 中的 Signer, 创建了用于签名交易的钱包 (wallet);
成功利用 Node.js 文件系统,导入了 .abi 接口文件以及 .bin 二进制文件,从而提供了合约的具体内容。
部署阶段:
成功利用 abi, bin 和 wallet 创建了 contract factory, 为部署合约提供了 initcode.
成功部署了 initcode, 并发送了 initcode transaction, 从而成功部署了合约。
成功确认了 initcode transaction, 并获得了交易收据。
含义:
Provider 是一种接口,它负责为钱包和网络建立起连接;
Wallet 是和以太坊账户相关的一种类,它负责使用私钥来对消息和交易进行签名。
作用:是合约部署准备过程的一部分:
准备 Provider 和 Wallet.
准备智能合约的 .bin 和 .abi 格式。
用法:
const provider = new ethers.providers.JsonRpcProvider(url);
const Wallet = new ethers.Wallet(privateKey, provider);
含义:
Character Encoding 是指字符编码,它定义了字节和文本之间的映射关系 (a mapping between bytes and text).
UTF-8 是最常用的字节和文本之间的映射关系。
关联:
每一串字节都可以根据不同的映射关系,被解释成为不同的文本,而 UTF-8 就是最常用的字符编码 (Character Encoding).
用法:
fs.readFileSync(path, "utf8");
概念:Contract Factory 是一种类,它负责用来创建合约。
原理:Contract Factory 可以在实例化后发送一种特殊的交易 (initcode transaction), 该交易的结果是一串代码,它会被部署为新的 contract.
应用:
async function deploy() {
const factory = new ethers.ConstractFactory(abi, bin, wallet);
const constract = await factory.deploy();
}
这里的 factory.deploy() 方法之前需要加 await 的原因是:根据 ehter.js 可以知道,该方法会返回一个 Promise< Constract >, 因此需要通过 async 和 await 来处理返回值 Promise。
如果既不不加 async 也不加 await, 那么在处理返回值 Promise 的时候,会由于不认识 .then() 方法而导致报错。
所以,如果要处理 Promise, 那么一定需要写上 async 和 await.
原理:
先运行 transaction factory 的 deploy() 方法,将 transaction factory 部署至以太坊网络上;
再运行 transaction factory 的deployTransaction() 方法,从而真正将智能合约部署在以太坊网络当中,并获得 transaction response;
最后,在以太坊网络响应了 transaction response 并经过区块确认交易后,会获得 transaction receipt,即我们在区块链浏览器上所看见的交易账单。
步骤:参考代码
1️⃣ 部署 Transaction Factory
const contract = factory.deploy();
2️⃣ 部署智能合约
constract.deployTransaction
3️⃣ resolve 交易收据
contract.deployTransaction.wait()
No comments yet