打字猴:1.703877228e+09
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
1703877257 区块链项目开发指南 [:1703875334]
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
[ 上一页 ]  [ :1.703877228e+09 ]  [ 下一页 ]