web3.eth.personal¶
web3-eth-personal
包让你可以同以太坊节点上的账户进行交互。
注解
这个包中的许多函数都是要发送像密码这种敏感信息的,因此不要在不安全的 Websocket 或 HTTP 服务提供器上调用这些函数,因为你的密码是明文发送的!
var Personal = require('web3-eth-personal');
// "Personal.providers.givenProvider" 在支持以太坊的浏览器上会被自动设置。
var personal = new Personal(Personal.givenProvider || 'ws://some.local-or-remote.node:8546');
// 或者使用 web3 包
var Web3 = require('web3');
var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546');
// -> web3.eth.personal
setProvider¶
web3.setProvider(myProvider)
web3.eth.setProvider(myProvider)
web3.shh.setProvider(myProvider)
web3.bzz.setProvider(myProvider)
...
将改变相应模块的 provider。
注解
当我们通过 web3
包调用它的时候,web3.eth
, web3.shh
等子模块的 provider 也会被设置,web3.bzz
这货是个例外,它总是需要一个单独的 provider。
参数¶
Object
-myProvider
: 一个有效的 provider.
返回值¶
Boolean
例子¶
var Web3 = require('web3');
var web3 = new Web3('http://localhost:8545');
// 或
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
// 改变 provider
web3.setProvider('ws://localhost:8546');
// 或
web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546'));
// 在 node.js 中使用 IPC provider
var net = require('net');
var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os 路径
// 或
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os 路径
// 在 windows 中路径为: "\\\\.\\pipe\\geth.ipc"
// 在 linux 中路径为: "/users/myuser/.ethereum/geth.ipc"
providers¶
web3.providers
web3.eth.providers
web3.shh.providers
web3.bzz.providers
...
包含当前可用的 providers.
返回值¶
具有以下 provider 的 Object
:
Object
-HttpProvider
: The HTTP provider is deprecated, as it won’t work for subscriptions.Object
-WebsocketProvider
: The Websocket provider is the standard for usage in legacy browsers.Object
-IpcProvider
: The IPC provider is used node.js dapps when running a local node. Gives the most secure connection.Object
-HttpProvider
: 因为不能用于订阅,HTTP provider 已经**不推荐使用**。Object
-WebsocketProvider
: Websocket provider 是用于传统的浏览器中的标准方法.Object
-IpcProvider
: 当运行一个本地节点时,IPC provider 用于 node.js 下的D App 环境,提供最为安全的连接。.
例子¶
var Web3 = require('web3');
// 使用指定的 Provider (e.g 比如在 Mist 中) 或者实例化一个新的 websocket provider
var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546');
// 或者
var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546'));
// 在 node.js 中使用 IPC provider
var net = require('net');
var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os 路径
// 或者
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os 路径
// windows 上的路径为: "\\\\.\\pipe\\geth.ipc"
// linux 上的路径为: "/users/myuser/.ethereum/geth.ipc"
givenProvider¶
web3.givenProvider
web3.eth.givenProvider
web3.shh.givenProvider
web3.bzz.givenProvider
...
在和以太坊兼容的浏览器中使用 web3.js 时,当前环境的原生 provider 会被浏览器设置。
web3.givenProvider 将返回浏览器设置的原生 provider ,否则返回 null
。
返回值¶
Object
: 浏览器设置好的 provider 或者 null
;
例子¶
currentProvider¶
web3.currentProvider
web3.eth.currentProvider
web3.shh.currentProvider
web3.bzz.currentProvider
...
返回值¶
Object
: 当前在用的 provider 或者 null
;
例子¶
BatchRequest¶
new web3.BatchRequest()
new web3.eth.BatchRequest()
new web3.shh.BatchRequest()
new web3.bzz.BatchRequest()
用来创建并执行批量请求的类
参数¶
none
返回值¶
Object
: 具有如下方法的一个对象:
add(request)
: To add a request object to the batch call.execute()
: Will execute the batch request.add(request)
: 添加请求对象到批量调用中。execute()
: 执行批量请求。
例子¶
var contract = new web3.eth.Contract(abi, address);
var batch = new web3.BatchRequest();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(contract.methods.balance(address).call.request({from: '0x0000000000000000000000000000000000000000'}, callback2));
batch.execute();
extend¶
web3.extend(methods)
web3.eth.extend(methods)
web3.shh.extend(methods)
web3.bzz.extend(methods)
...
用来扩展 web3 模块
注解
你也可以使用 *.extend.formatters
作为额外的格式化函数进行输入输出参数的格式化. 更多详情请看 源文件 。
参数¶
methods
-Object
: 扩展对象,带有一组如下所示的方法描述对象:property
-String
: (可选) 要添加到模块上的属性名称。如果没有设置属性,则直接添加到模块上。methods
-Array
: 方法描述对象数组:name
-String
: 要添加的方法名称。call
-String
: RPC 方法名称。params
-Number
: (可选) 方法的参数个数,默认值为 0。inputFormatter
-Array
: (可选) 输入格式化函数数组,每个成员对应一个函数参数,或者使用 null 来对应不需要进行格式化处理的参数。outputFormatter - ``Function
: (可选) 用来格式化方法输出。
返回值¶
Object
: 扩展模块.
例子¶
web3.extend({
property: 'myModule',
methods: [{
name: 'getBalance',
call: 'eth_getBalance',
params: 2,
inputFormatter: [web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputDefaultBlockNumberFormatter],
outputFormatter: web3.utils.hexToNumberString
},{
name: 'getGasPriceSuperFunction',
call: 'eth_gasPriceSuper',
params: 2,
inputFormatter: [null, web3.utils.numberToHex]
}]
});
web3.extend({
methods: [{
name: 'directCall',
call: 'eth_callForFun',
}]
});
console.log(web3);
> Web3 {
myModule: {
getBalance: function(){},
getGasPriceSuperFunction: function(){}
},
directCall: function(){},
eth: Eth {...},
bzz: Bzz {...},
...
}
newAccount¶
web3.eth.personal.newAccount(password, [callback])
创建一个新的账户。
注解
永远不要通过不安全的 Websocket 或 HTTP 服务提供器来调用这些函数,因为你的密码是明文发送的!
参数¶
password
-String
: 用来加密账户的密码。
返回值¶
Promise<string>
:新创建账户地址
例子¶
web3.eth.personal.newAccount('!@superpassword')
.then(console.log);
> '0x1234567891011121314151617181920212223456'
sign¶
web3.eth.personal.sign(dataToSign, address, password [, callback])
该方法通过下面的方式计算一个以太坊特定签名:
sign(keccak256("\x19Ethereum Signed Message:\n" + dataToSign.length + dataToSign)))
在消息前加个前缀使得算出的签名可以被识别为以太坊特定签名。
如果你同时有原始消息和签名消息,就可以使用 web3.eth.personal.ecRecover (下面有示例) 来恢复签名账户地址
注解
通过不安全的 HTTP RPC 连接发送帐户密码非常危险。
参数¶
String
- 要签名的数据。 如果是字符串会使用 web3.utils.utf8ToHex 将其转换为 16 进制。String
- 用来签名的账户地址。String
- 用来签名的账户密码。Function
- (可选) 可选的回调函数,其第一个参数为错误对象,第二个参数为签名结果。
返回值¶
Promise<string>
- 签名字符串。
例子¶
web3.eth.personal.sign("Hello world", "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "test password!")
.then(console.log);
> "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"
// 下面代码实现同样功能
web3.eth.personal.sign(web3.utils.utf8ToHex("Hello world"), "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "test password!")
.then(console.log);
> "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"
// 使用原始消息和签名消息来恢复签名账户地址
web3.eth.personal.ecRecover("Hello world", "0x30755ed65396...etc...")
.then(console.log);
> "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe"
ecRecover¶
web3.eth.personal.ecRecover(dataThatWasSigned, signature [, callback])
恢复数据签名帐户。
参数¶
String
- 被签名的数据。 如果是字符串会使用 web3.utils.utf8ToHex 将其转换为 16 进制。String
- 签名。Function
- (可选) 可选的回调函数,其第一个参数为错误对象,第二个参数为签名结果。
返回值¶
Promise<string>
- 签名账户。
例子¶
web3.eth.personal.ecRecover("Hello world", "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400").then(console.log);
> "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe"
signTransaction¶
web3.eth.personal.signTransaction(transaction, password [, callback])
对交易进行签名,账户必须先解锁。
注解
通过不安全的 HTTP RPC 连接发送帐户密码非常危险。
参数¶
Object
- 要签名的交易数据,更多详情请看 web3.eth.sendTransaction() 。String
- 用来签名交易的from
账户密码。Function
- (可选) 可选的回调函数,其第一个参数为错误对象,第二个参数为签名结果。
返回值¶
Promise<Object>
- RLP 编码的交易对象,其 raw
属性可以用来通过 web3.eth.sendSignedTransaction 来发送交易。
例子¶
web3.eth.signTransaction({
from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0",
gasPrice: "20000000000",
gas: "21000",
to: '0x3535353535353535353535353535353535353535',
value: "1000000000000000000",
data: ""
}, 'MyPassword!').then(console.log);
> {
raw: '0xf86c808504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a04f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88da07e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0',
tx: {
nonce: '0x0',
gasPrice: '0x4a817c800',
gas: '0x5208',
to: '0x3535353535353535353535353535353535353535',
value: '0xde0b6b3a7640000',
input: '0x',
v: '0x25',
r: '0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d',
s: '0x7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0',
hash: '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384'
}
}
sendTransaction¶
web3.eth.personal.sendTransaction(transactionOptions, password [, callback])
该方法用来通过账户管理 API 来发送交易。
注解
通过不安全的 HTTP RPC 连接发送帐户密码非常危险。
参数¶
Object
- 交易对象属性String
- 当前帐户的密码Function
- (可选) 可选的回调函数,其第一个参数为错误对象,第二个参数为签名结果。
返回值¶
Promise<string>
- 交易哈希
例子¶
web3.eth.sendTransaction({
from: "0xEB014f8c8B418Db6b45774c326A0E64C78914dC0",
gasPrice: "20000000000",
gas: "21000",
to: '0x3535353535353535353535353535353535353535',
value: "1000000000000000000",
data: ""
}, 'MyPassword!').then(console.log);
> '0xda3be87732110de6c1354c83770aae630ede9ac308d9f7b399ecfba23d923384'
unlockAccount¶
web3.eth.personal.unlockAccount(address, password, unlockDuraction [, callback])
解锁账户
注解
通过不安全的 HTTP RPC 连接发送帐户密码非常危险。
参数¶
address
-String
: 要解锁的账户地址。password
-String
- 账户密码。unlockDuration
-Number
- 将帐户保持在解锁状态的持续时间。
例子¶
web3.eth.personal.unlockAccount("0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "test password!", 600)
.then(console.log('Account unlocked!'));
> "Account unlocked!"
lockAccount¶
web3.eth.personal.lockAccount(address [, callback])
锁定给定帐户。
注解
通过不安全的 HTTP RPC 连接发送帐户密码非常危险。
参数¶
1. address
- String
: 要锁定的账户地址。
4. Function
- (可选) 可选的回调函数,其第一个参数为错误对象,第二个参数为签名结果。
返回值¶
Promise<boolean>
例子¶
web3.eth.personal.lockAccount("0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe")
.then(console.log('Account locked!'));
> "Account locked!"
getAccounts¶
web3.eth.personal.getAccounts([callback])
通过使用服务提供器并调用 RPC 方法 personal_listAccounts
返回节点控制的账户列表。使用 web3.eth.accounts.create()
创建的账户不会被添加到这个列表中。这方面的更多信息可以查看 web3.eth.personal.newAccount()。
结果和 web3.eth.getAccounts() 是一样的,只是它用的 RPC 方法是 eth_accounts
。
返回值¶
Promise<Array>
- 节点控制地址数组
例子¶
web3.eth.personal.getAccounts()
.then(console.log);
> ["0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "0xDCc6960376d6C6dEa93647383FfB245CfCed97Cf"]
importRawKey¶
web3.eth.personal.importRawKey(privateKey, password)
将给定的私钥导入密钥存储区,并使用密码对其进行加密。
返回和导入私钥对应的新账户地址。
注解
通过不安全的 HTTP RPC 连接发送帐户密码非常危险。
参数¶
privateKey
-String
- 为加密的私钥 (16 进制字符串)。password
-String
- 账户密码。
返回值¶
Promise<string>
- 账户地址。
例子¶
web3.eth.personal.importRawKey("cd3376bb711cb332ee3fb2ca04c6a8b9f70c316fcdf7a1f44ef4c7999483295e", "password1234")
.then(console.log);
> "0x8f337bf484b2fc75e4b0436645dcc226ee2ac531"