web3js eth vs 账户 vs 个人
web3js eth vs account vs personal
web3.eth, web3.eth.personal, web3.eth.accounts 看起来和我很像。因为它们都有相同的功能——签名、发送交易等。在某些情况下应用这些包的好方法是什么?我的意思是,我们如何决定何时使用每个包?
当我查看文档时,它告诉我
1) web3.eth - 与以太坊区块链和智能合约交互
2) web3.eth.personal - 与以太坊节点账户互动
3) web3.eth.accounts - 生成以太坊账户并签署交易和数据
这是否意味着我可以用个人包管理本地节点而其他人用帐户管理?
我在下面引用了一篇关于该主题的更详尽的媒体文章。
但为了简短的回答。
使用web3.eth.accounts包时,操作应在本地节点进行,因为在本地进行操作时,私钥不会发送到网络,是安全的。
您可以在使用其他实体的帐户时使用 web3.eth.personal。无论您发送什么 password/information 都会被另一个节点使用,因此您不会使用此包来创建用户帐户或存储密钥;
这就是我如何实施反映雷格曼的回答。我使用 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)})
})
web3.eth, web3.eth.personal, web3.eth.accounts 看起来和我很像。因为它们都有相同的功能——签名、发送交易等。在某些情况下应用这些包的好方法是什么?我的意思是,我们如何决定何时使用每个包?
当我查看文档时,它告诉我
1) web3.eth - 与以太坊区块链和智能合约交互
2) web3.eth.personal - 与以太坊节点账户互动
3) web3.eth.accounts - 生成以太坊账户并签署交易和数据
这是否意味着我可以用个人包管理本地节点而其他人用帐户管理?
我在下面引用了一篇关于该主题的更详尽的媒体文章。
但为了简短的回答。 使用web3.eth.accounts包时,操作应在本地节点进行,因为在本地进行操作时,私钥不会发送到网络,是安全的。
您可以在使用其他实体的帐户时使用 web3.eth.personal。无论您发送什么 password/information 都会被另一个节点使用,因此您不会使用此包来创建用户帐户或存储密钥;
这就是我如何实施反映雷格曼的回答。我使用 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)})
})