1703877225
1703877227
区块链项目开发指南 4.1.7 发送以太币
1703877228
1703877229
让我们看看如何向任意地址发送以太币。为了发送以太币,需要使用web3.eth.sendTransaction()方法。该方法可用于发送任意种类的交易,但主要用于发送以太币,原因是使用这种方法部署合约或者调用合约方法比较麻烦——它要求生成交易数据而不是自动生成交易数据。该方法的交易对象包含下列属性:
1703877230
1703877231
·from。发送账户的地址。如未标明,使用web3.eth.defaultAccount属性。
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
[
上一页 ]
[ :1.703877225e+09 ]
[
下一页 ]