跳至主要内容
本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)

caver.wallet

caver.wallet "是一个在内存钱包中管理Keyring实例的软件包。 caver.wallet accepts all SingleKeyring, MultipleKeyring, and RoleBasedKeyring, and manages them by address.

Class

KeyringContainer


caver.wallet

KeyringContainer "是一个管理SingleKeyringMultipleKeyringRoleBasedKeyring实例的类。 当 Caver 实例化时,它会在 caver.wallet 中创建一个 KeyringContainer 实例。 您可以通过 caver.wallet 在内存钱包中存储和管理钥匙实例。

属性

名称类型描述
lengthnumberkeyringContainer 中keyrings的数量。

caver.wallet.generate


caver.wallet.generate(numberOfKeyrings [, entropy])

在 keyringContainer 中生成带有随机生成的私钥的 SingleKeyring 实例。

参数

名称类型描述
numberOfKeyringsnumber要创建的 SingleKeyring 实例的数量。
entropystring(可选)用于增加熵的随机字符串。

返回价值

类型描述
Array包含已生成地址的数组。

举例


// generate without entropy
> caver.wallet.generate(3)
[
'0xb4b0c3781082cf818bfaf5adfc73fdf59d92c1cd',
'0x9957dfd92e4b70f91131c573293343bc5f21f215',
'0xed2fe179c18fa528da2392532998560bd1008511'
]
// generate with entropy
> caver.wallet.generate(3, caver.utils.randomHex(32))
[
'0xb4b0c3781082cf818bfaf5adfc73fdf59d92c1cd',
'0x9957dfd92e4b70f91131c573293343bc5f21f215',
'0xed2fe179c18fa528da2392532998560bd1008511'
]

caver.wallet.newKeyring


caver.wallet.newKeyring(address, key)

使用给定参数创建钥匙圈实例,并将其添加到 caver.wallet 中。

如果 key 是私钥字符串,则会创建一个使用单个私钥的 SingleKeyring 实例。 如果 key 是一个包含私钥字符串的数组,则会创建一个使用多个私钥的 MultipleKeyring 实例。 如果 key 是一个二维数组,其中每个元素都包含每个角色要使用的私钥,则会创建一个 RoleBasedKeyring 实例。 创建的keyring会添加到 caver.wallet

参数

名称类型描述
addressstring地址字符串。
keystring \Array

返回价值

类型描述
object返回添加到 caver.wallet 的 keyring 实例(SingleKeyringMultipleKeyringRoleBasedKeyring )。

示例


// Create a instance of SingleKeyring and add to caver.wallet
> caver.wallet.newKeyring('0x{address in hex}', '0x{private key}')
SingleKeyring {
_address: '0x386a4bb40abbfaa59cecdc3ced202475895fd569',
_key: PrivateKey { _privateKey: '0x{private key}' }
}
// Create a instance of MultipleKeyring and add to caver.wallet
> caver.wallet.newKeyring('0x{address in hex}', ['0x{private key1}', '0x{private key2}'])
MultipleKeyring {
_address: '0x17e7531b40ad5d7b5fa7b4ec78df64ce1cb36d24',
_keys: [
PrivateKey { _privateKey: '0x{private key1}' },
PrivateKey { _privateKey: '0x{private key2}' }
]
}
// Create a instance of RoleBasedKeyring and add to caver.wallet
> const roleBasedKeys = [
['0x{private key1}', '0x{private key2}'],
['0x{private key3}', '0x{private key4}'],
['0x{private key5}', '0x{private key6}'],
]
> caver.wallet.newKeyring('0x{address in hex}', roleBasedKeys)
RoleBasedKeyring {
_address: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_keys: [
[
PrivateKey { _privateKey: '0x{private key1}' },
PrivateKey { _privateKey: '0x{private key2}' }
],
[
PrivateKey { _privateKey: '0x{private key3}' },
PrivateKey { _privateKey: '0x{private key4}' }
],
[
PrivateKey { _privateKey: '0x{private key5}' },
PrivateKey { _privateKey: '0x{private key6}' }
]
]
}

caver.wallet.updateKeyring


caver.wallet.updateKeyring(keyring)

更新 caver.wallet 中的 keyring。 当一个新的 keyring 实例(SingleKeyringMultipleKeyringRoleBasedKeyring 被作为参数传递时,存储在 caver.wallet 中与给定的 keyring 实例的 address 属性相匹配的现有密钥环将被找到并替换为给定的密钥环。 如果找不到匹配的 keyring,则会出现错误。

参数

名称类型描述
keyringobject要存储在 caver.wallet 中的新 keyring(SingleKeyringMultipleKeyringRoleBasedKeyring )。

返回价值

类型描述
object存储在caver.wallet中的已更新 keyring(SingleKeyringMultipleKeyringRoleBasedKeyring )。

示例


> caver.wallet.updateKeyring(newKeyring)
SingleKeyring {
_address: '0x386a4bb40abbfaa59cecdc3ced202475895fd569',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.getKeyring


caver.wallet.getKeyring(address)

返回与 caver.wallet 中的地址相对应的密钥环实例。

参数

名称类型描述
addressstring要查询的 keyring 地址。

返回价值

类型描述
object找到的keyring实例(SingleKeyringMultipleKeyringRoleBasedKeyring )存储在 caver.wallet 中。

示例


> caver.wallet.getKeyring('0x386a4bb40abbfaa59cecdc3ced202475895fd569')
SingleKeyring {
_address: '0x386a4bb40abbfaa59cecdc3ced202475895fd569',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.isExisted


caver.wallet.isExisted(address)

如果存在与地址匹配的 keyring,则返回 true

参数

名称类型描述
addressstring要检查是否存在的keyring地址。

返回价值

类型描述
booleantrue "表示 `caver.wallet "中存在与地址匹配的密钥。

举例


> caver.wallet.isExisted('0x386a4bb40abbfaa59cecdc3ced202475895fd569')
true

caver.wallet.add


caver.wallet.add(keyring)

caver.wallet 添加 keyring 实例。 如果新给定的keyring与 caver.wallet 中已存在的keyring地址相同,则会返回错误信息。 在这种情况下,使用 updateKeyring 更新caver.wallet中的现有keyring。

参数

名称类型描述
keyringobject要添加到 caver.wallet 的keyring实例(SingleKeyringMultipleKeyringRoleBasedKeyring )。

返回价值

类型描述
objectcaver.wallet`中添加的keyring(SingleKeyringMultipleKeyringRoleBasedKeyring )。

示例


> caver.wallet.add(keyring)
SingleKeyring {
_address: '0x386a4bb40abbfaa59cecdc3ced202475895fd569',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.remove


caver.wallet.remove(address)

caver.wallet 中删除地址与给定钥匙圈地址一致的keyring。

参数

名称类型描述
addressstring要在 caver.wallet 中删除的keyring的地址。

返回价值

类型描述
boolean如果从 caver.wallet'中删除了keyring,则为 true

示例


> caver.wallet.remove('0x6a3edfad6d1126020d5369e9097db39281876c5d')
true

caver.wallet.signMessage


caver.wallet.signMessage(address, message, role [, index])

使用存储在 caver.wallet 中的密钥,用 kaia 专用前缀签署信息。 这样就能计算出 kaia 特有的签名:


sign(keccak256("\x19Klaytn Signed Message:\n" + len(message) + message)))

如果用户没有提供索引参数,caver.wallet.signMessage 会使用角色使用的所有私钥签署信息。 如果给定了索引参数,caver.wallet.signMessage 将只使用给定索引上的一个私钥来签署信息。 在 caver-js 中使用的角色可以通过 caver.wallet.keyring.role找到。

参数

名称类型描述
addressstring要使用的keyring地址。
messagestring要签署的信息。
rolenumber表示钥匙作用的数字。 您可以使用 caver.wallet.keyring.role
indexnumber(可选)要使用的私人密钥的索引。 索引必须小于为每个角色定义的私钥数组的长度。 如果没有定义索引,该方法将使用所有私钥。

返回价值

类型描述
object包含签名结果的对象。

返回的对象包含以下内容

名称类型描述
messageHashstring用 kaia 专用前缀签署信息。
singaturesArray[SignatureData] (#signaturedata)的数组。
messagestring待签名消息

示例


// Sign message with roleTransactionKey which uses two private keys
> caver.wallet.signMessage('0x386a4bb40abbfaa59cecdc3ced202475895fd569', 'message to sign', caver.wallet.keyring.role.roleTransactionKey)
{
messageHash: '0x9c4c1ae0aa1faf7e59eaf6fcf36a34542698197b379a9949b58c92925e74c069',
signatures: [
SignatureData { _v: '0x1c', _r: '0xb3239...', _s: '0x584d2...' },
SignatureData { _v: '0x1b', _r: '0x13c64...', _s: '0x60c61...' }
],
message: 'message to sign'
}
// Sign message with roleTransactionKey and index
> caver.wallet.signMessage('0x386a4bb40abbfaa59cecdc3ced202475895fd569', 'message to sign', caver.wallet.keyring.role.roleTransactionKey, 1)
{
messageHash: '0x9c4c1ae0aa1faf7e59eaf6fcf36a34542698197b379a9949b58c92925e74c069',
signatures: [
SignatureData { _v: '0x1b', _r: '0x13c64...', _s: '0x60c61...' }
],
message: 'message to sign'
}

caver.wallet.sign


caver.wallet.sign(address, transaction [, index] [, hasher])

使用 caver.wallet 中的密钥作为事务的发送方签署事务,并在事务对象中添加签名

对于 Account Update 交易,使用 roleTransactionKey ,否则,使用 roleTransactionKey 。 如果用户没有定义 "index","caver.wallet.sign "会使用角色使用的所有私钥签署交易。 如果定义了 indexcaver.wallet.sign 就会只使用给定索引上的一个私钥来签署交易。

参数

名称类型描述
addressstring要使用的 keyring 地址。
transactionobject[Transaction](.../caver-transaction/caver-transaction.md#class)的实例。
indexnumber(可选)要使用的私人密钥的索引。 索引必须小于为每个角色定义的私钥数组的长度。 如果没有定义索引,该方法将使用所有私钥。
hasherfunction(可选)用于获取交易哈希值的哈希函数。 如果将 hasher 作为参数,它将计算事务哈希值,而不是使用 caver-js 中的默认方法计算事务哈希值。 有关事务散列生成的默认方法,请参阅 Basic

返回价值

返回 "对象 "的 "许诺":已签署的事务。

类型描述
object已签名的事务实例。 签名将附加到 transaction.signatures 中。

有关事务类型字段的更多信息,请参阅 [caver.transaction](.../caver-transaction/caver-transaction.md)。

示例


// This example uses the ValueTransfer transaction.
// Please refer to [caver.transaction] for how to use various transaction types.
> const transaction = caver.transaction.valueTransfer.create({
from: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
value: 1,
gas: 30000,
})
> const customHasher = () => { ... }
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleTransactionKey
> caver.wallet.sign('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction).then(console.log)
ValueTransfer {
_type: 'TxTypeValueTransfer',
_from: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_gas: '0x7530',
_signatures: [
SignatureData { _v: '0x4e43', _r: '0xd78a2...', _s: '0x379e9...' },
SignatureData { _v: '0x4e43', _r: '0x70a58...', _s: '0x2ab28...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleTransactionKey and index
> caver.wallet.sign('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction, 1).then(console.log)
ValueTransfer {
_type: 'TxTypeValueTransfer',
_from: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_gas: '0x7530',
_signatures: [
SignatureData { _v: '0x4e43', _r: '0x70a58...', _s: '0x2ab28...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleTransactionKey and hasher
> caver.wallet.sign('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction, customHasher).then(console.log)
ValueTransfer {
_type: 'TxTypeValueTransfer',
_from: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_gas: '0x7530',
_signatures: [
SignatureData { _v: '0x4e44', _r: '0x7a8b6...', _s: '0x17139...' },
SignatureData { _v: '0x4e43', _r: '0x7f978...', _s: '0x1a532...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleTransactionKey, index and hasher
> caver.wallet.sign('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction, 0, customHasher).then(console.log)
ValueTransfer {
_type: 'TxTypeValueTransfer',
_from: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_gas: '0x7530',
_signatures: [
SignatureData { _v: '0x4e44', _r: '0x7a8b6...', _s: '0x17139...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}

caver.wallet.signAsFeePayer


caver.wallet.signAsFeePayer(address, transaction [, index] [, hasher])

使用 caver.wallet 中的密钥,在交易对象中以交易的 费用支付方 身份签名并附加 费用支付方签名

要以付费者身份签署交易,请使用 roleFeePayerKey. 如果用户没有定义 "索引","caver.wallet.signAsFeePayer "会使用角色使用的所有私钥签署交易。 如果定义了 indexcaver.wallet.signAsFeePayer 将只使用给定索引上的一个私钥来签署交易。

如果未定义 "transaction.feePayer",则分配由 "caver.wallet "创建的密钥地址。

参数

名称类型描述
addressstring要使用的keyring地址。
transactionobjectFeeDelegatedTransaction](../caver-transaction/fee-delegation.md) 的实例。
indexnumber(可选)要使用的私人密钥的索引。 索引必须小于为每个角色定义的私钥数组的长度。 如果没有定义索引,该方法将使用所有私钥。
hasherfunction(可选)用于获取交易哈希值的函数。 如果将 hasher 定义为参数,就会使用它来获取事务哈希值,而不是使用 caver-js 中的默认实现。

返回价值

返回 "object" 的 "Promise":已签署的事务。

类型描述
object已签名的事务实例。 签名结果会附加到 "transaction.feePayerSignatures "中。

有关事务类型字段的更多信息,请参阅 [caver.transaction](.../caver-transaction/caver-transaction.md)。

示例


// This example uses the FeeDelegatedValueTransfer transaction.
// Please refer to [caver.transaction] for how to use various transaction types.
> const transaction = caver.transaction.feeDelegatedValueTransfer.create({
from: '0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c',
to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
value: 1,
gas: 30000,
})
> const customHasher = () => { ... }
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleFeePayerKey
> caver.wallet.signAsFeePayer('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction).then(console.log)
FeeDelegatedValueTransfer {
_type: 'TxTypeFeeDelegatedValueTransfer',
_from: '0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c',
_gas: '0x7530',
_signatures: [ SignatureData { _v: '0x01', _r: '0x', _s: '0x' } ],
_feePayer: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_feePayerSignatures: [
SignatureData { _v: '0x4e44', _r: '0x7010e...', _s: '0x65d6b...' },
SignatureData { _v: '0x4e43', _r: '0x96ef2...', _s: '0x77f34...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleFeePayerKey, index
> caver.wallet.signAsFeePayer('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction, 0).then(console.log)
FeeDelegatedValueTransfer {
_type: 'TxTypeFeeDelegatedValueTransfer',
_from: '0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c',
_gas: '0x7530',
_signatures: [ SignatureData { _v: '0x01', _r: '0x', _s: '0x' } ],
_feePayer: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_feePayerSignatures: [
SignatureData { _v: '0x4e44', _r: '0x7010e...', _s: '0x65d6b...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleFeePayerKey and hasher
> caver.wallet.signAsFeePayer('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction, customHasher).then(console.log)
FeeDelegatedValueTransfer {
_type: 'TxTypeFeeDelegatedValueTransfer',
_from: '0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c',
_gas: '0x7530',
_signatures: [ SignatureData { _v: '0x01', _r: '0x', _s: '0x' } ],
_feePayer: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_feePayerSignatures: [
SignatureData { _v: '0x4e43', _r: '0xe48bf...', _s: '0x1cf36...' },
SignatureData { _v: '0x4e43', _r: '0x82976...', _s: '0x3c5e0...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}
// Sign a transaction with the address of RoleBasedKeyring which use two private keys for roleFeePayerKey, index and hasher
> caver.wallet.signAsFeePayer('0xe7e9184c125020af5d34eab7848bab799a1dcba9', transaction, 0, customHasher).then(console.log)
FeeDelegatedValueTransfer {
_type: 'TxTypeFeeDelegatedValueTransfer',
_from: '0x6fddbcb99d31b8755c2b840a367f53eea4b4f45c',
_gas: '0x7530',
_signatures: [ SignatureData { _v: '0x01', _r: '0x', _s: '0x' } ],
_feePayer: '0xe7e9184c125020af5d34eab7848bab799a1dcba9',
_feePayerSignatures: [
SignatureData { _v: '0x4e43', _r: '0x82976...', _s: '0x3c5e0...' }
],
_to: '0x3424b91026bdc5ec55df4548e6ebf0f28b60abd7',
_value: '0x1',
_chainId: '0x2710',
_gasPrice: '0x5d21dba00',
_nonce: '0x0'
}

让这个页面变得更好