1703877232
1703877233
·to。可选项。信息目的地的地址,对于合约创建交易,该项未定义。
1703877234
1703877235
·value。可选项。通常在转账中单位为wei(在合约创建交易情况下,作为合约的资金注入,单位也是wei)。
1703877236
1703877237
·gas。可选项。交易使用的gas量(未使用的gas被退回)。如果不提供,则自动决定该项。
1703877238
1703877239
·gasPrice。可选项。交易中以wei为单位的gas价格,默认为网络平均gas价格。
1703877240
1703877241
·data。可选项。它或者是包含信息相关数据的字节字符串,或者是初始代码(在合约创建交易情况下)。
1703877242
1703877243
·nonce。可选项。它是个整数。每一个交易都有一个相关计数nonce。该数字表示交易发起人发送的交易数量。如果未提供nonce,则自动确定。它的作用是防止重播攻击。nonce不是与挖区块相关的那个随机数。如果使用的nonce大于交易应当有的nonce,则交易被放入一个队列直到其他交易数量到达。例如,如果下一个交易的nonce应该是4,而nonce被设为10,则geth在广播这个交易之前将等待之间的6个交易。nonce为10的交易称为排队交易,而不是待定交易。
1703877244
1703877245
向一个地址发送以太币的示例如下:
1703877246
1703877247
1703877248
1703877249
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
[
上一页 ]
[ :1.703877232e+09 ]
[
下一页 ]