web3js eth vs account vs personal

时间:2018-04-03 20:12:10

标签: javascript ethereum web3js

web3.eth,web3.eth.personal,web3.eth.accounts看起来与我类似。因为它们都具有相同的功能 - sign,sendtransaction等。在某些情况下应用这些包的好方法是什么?我的意思是,我们如何决定何时使用每个包?

当我查看文档时,它会告诉我

1)web3.eth - 与以太坊区块链和智能合约交互

2)web3.eth.personal - 与以太坊交互'节点帐户

3)web3.eth.accounts - 生成以太坊帐户并签署交易和数据

这是否意味着我可以使用个人包管理本地节点,而其他人可以管理帐户?

2 个答案:

答案 0 :(得分:1)

我在下面提到了一篇关于该主题的更全面的媒体文章。

但是对于简短的回答。 使用web3.eth.accounts包时,应该在本地节点上执行操作,因为当在本地执行操作时,私钥不会被发送到网络并且它们是安全的。

当您使用其他实体的帐户时,您可以使用web3.eth.personal。无论您发送的密码/信息是否会被其他节点使用,因此您不会使用此软件包来创建用户帐户或存储密钥;

https://medium.com/@andthentherewere0/should-i-use-web3-eth-accounts-or-web3-eth-personal-for-account-creation-15eded74d0eb

答案 1 :(得分:0)

这就是我实施的反映Legman答案的方法。我使用ganache和web3js将以太网从一个转移到另一个。每次连接到ganache时,PrivateKey都会发生变化。

// (Web3js) Test making transaction from one account to another in ganache
web3.eth.getAccounts().then(function (accounts) { // NOTE : to reduce latency, add relevant data to database
var senderAddress = accounts[0]
var receiverAddress = accounts[1]

// Balance before transaction
var checkSenderBalance = function () {
return web3.eth.getBalance(senderAddress)
  .then(function (balance) {console.log(balance)})
  .catch(function (error) {console.log(error)})
}

var checkReceiverBalance = function () {
return web3.eth.getBalance(receiverAddress)
  .then(function (balance) {console.log(balance)})
  .catch(function (error) {console.log(error)})
}

var rawTx = {
  from: senderAddress,
  to: receiverAddress,
  gasPrice: '200',
  gas: '210000',
  value: '1000',
  data: '' // NOTE : need to serialize and make it as HEX code to send data
}

// Case1 : Log into account with privateKey and signTransaction
var privateKey = '0xf8d19b3c72f27a9db1a71f73d229afe5980419928b0b33232efb4033494f1562'
var sender = web3.eth.accounts.privateKeyToAccount(privateKey) // Object to call signTransaction
var makeTransaction = function () {
  return sender.signTransaction(rawTx)
  .then(function (signedTx) {
    return web3.eth.sendSignedTransaction(signedTx.rawTransaction)
  })
  .then(function (receipt) {
    console.log(receipt)
  })
  .catch(function (error) {
    console.log(error)
  })
}

// Case2 : signTransaction using privateKey
var privateKey = '0xf8d19b3c72f27a9db1a71f73d229afe5980419928b0b33232efb4033494f1562'
var makeTransaction = function () {
  return web3.eth.accounts.signTransaction(rawTx, privateKey)
    .then(function (signedTx) {
    return web3.eth.sendSignedTransaction(signedTx.rawTransaction)
  })
  .then(function (receipt) {
    console.log(receipt)
  })
  .catch(function (error) {
    console.log(error)
  })
}
  // Case3 : Using Personal package
  // var makeTransaction = web3.eth.personal.unlockAccount(senderAddress, '')
//   .then(function (result) {
//     if (result) return web3.eth.personal.signTransaction(rawTx, '')
//   })
//   .then(function (signedTx) {
//     return web3.eth.personal.sendTransaction(signedTx.rawTransaction)
//   })
//   .catch(function (error) {
//     console.log(error)
//   })

checkSenderBalance()
.then(checkReceiverBalance)
.then(makeTransaction)
.then(checkSenderBalance)
.then(checkReceiverBalance)
.catch(function (error) {console.log(error)})
})