1703877250
这里从账户0向账户1发送一个以太币。在运行geth时,确保使用unlock选项解锁两个账户。在geth交互接口上,提示输入密码,但是如果账户被锁定,交互接口以外的web3.js API将返回error。这个方法返回交易哈希。然后可以使用getTransactionReceipt()方法检查是否挖出了交易。
1703877251
1703877252
还可以用web3.personal.listAccounts()、web3.personal.unlockAccount(addr,pwd)和web3.personal.newAccount(pwd)实时管理账户。
1703877253
1703877254
1703877255
1703877256
1703877258
区块链项目开发指南 4.1.8 处理合约
1703877259
1703877260
让我们学习如何部署一个新合约、如何使用一个已部署合约的地址获取其引用、如何向合约发送以太币、如何发送交易以调用合约的函数(方法),以及如何估算一个函数调用的gas。
1703877261
1703877262
若要部署一个新合约或者获取一个已部署合约的引用,首先需要使用web3.eth.contract()方法创建一个合约对象。该方法以合约ABI作为一个实参,并返回合约对象。
1703877263
1703877264
创建合约对象的代码如下:
1703877265
1703877266
1703877267
1703877268
1703877269
有了合约之后,可以使用合约对象的新方法部署它,或者使用at方法获取与ABI匹配的、一个已部署合约的引用。
1703877270
1703877271
部署合约的示例如下:
1703877272
1703877273
1703877274
1703877275
1703877276
其中,new方法的调用是异步的,所以如果成功创建和广播交易,回调函数将被调用两次。第一次,广播交易之后调用它;第二次,挖出交易之后调用它。如果不提供回调函数,则proof变量的address属性被设成undefined。挖出交易之后,address属性将被设置。
1703877277
1703877278
在proof合约中,没有构造函数,但是如果有构造函数,则构造函数实参应当放在new方法的开头。传送的对象包含from地址、合约字节码和使用的gas上限。这三个属性必须存在,否则无法创建交易。该对象可以有被传送给sendTransaction方法的对象所展示的属性,但是这里,data是合约字节码,且to属性被忽略。
1703877279
1703877280
可以用at方法引用一个已经部署的合约。相关代码如下:
1703877281
1703877282
1703877283
1703877284
1703877285
现在让我们看看如何发送交易以调用合约方法。相关代码如下:
1703877286
1703877287
1703877288
1703877289
1703877290
这里调用方法同名对象的sendTransaction方法。被传送给这个sendTransaction方法的对象属性与web3.eth.sendTransaction()相同,只是data和to属性被忽略了。
1703877291
1703877292
如果想调用节点本地的方法,而非创建交易并广播,则可使用call而非sendTransaction。示例如下:
1703877293
1703877294
1703877295
1703877296
1703877297
有时必须发现找到调用方法所需的gas,这样可以决定是否调用。web3.eth.estimateGas可用于此目的。然而,直接使用web3.eth.estimateGas()要求生成交易,因此可以使用方法同名对象的estimateGas()方法。示例如下:
1703877298
1703877299
[
上一页 ]
[ :1.70387725e+09 ]
[
下一页 ]