Links

caver.wallet.keyring

caver.wallet.keyring은 주소와 개인키를 포함하는 키링 관련 기능을 제공하는 패키지입니다.

Class

Keyring은 계정 주소와 개인키를 포함하는 구조입니다. 사용자들이 클레이튼 계정을 사용해 서명을 할 수 있게 해주는 caver-js 클래스입니다.
Keyring can be classified into three types depending on the type of key being stored: SingleKeyring to store one address and one private key, MultipleKeyring to store one address and multiple private keys, and RoleBasedKeyring to store one address and one or more private keys for each role.

SingleKeyring

const keyring = new caver.wallet.keyring.singleKeyring(address, key)
SingleKeyring은 계정의 addressprivate key를 저장하는 클래스입니다. To create a SingleKeyring instance with a private key string, please refer to caver.wallet.keyring.create.
SingleKeyring는 역할이 할당되지 않은 개인키를 사용합니다.
properties
Name
Type
Description
address
string
계정 주소.
key
An instance of PrivateKey containing one private key inside.

MultipleKeyring

const keyring = new caver.wallet.keyring.multipleKeyring(address, keys)
MultipleKeyring은 계정의 addressprivate keys를 저장하는 클래스입니다. To create a MultipleKeyring instance with private key strings, please refer to caver.wallet.keyring.create.
MultipleKeyring는 역할이 할당되지 않은 개인키들을 사용합니다.
properties
Name
Type
Description
address
string
The address of the account.
keys
Array
An array of PrivateKey instances containing one private key inside.

RoleBasedKeyring

const keyring = new caver.wallet.keyring.roleBasedKeyring(address, keys)
RoleBasedKeyring는 계정의 address와 각 역할에 사용될 private keys를 배열 형식으로 저장하는 클래스입니다.
RoleBasedKeyring defines keys which is implemented as a two-dimensional array (empty keys looks like [ [], [], [] ]) that can include multiple keys for each role. 2차원 배열의 첫 번째 원소에는 roleTransactionKey로 사용될 개인키(들), 두 번째 원소에는 roleAccountUpdateKey로 사용될 개인키(들), 세 번째 원소에는 roleFeePayerKey로 사용될 개인키(들)이 저장됩니다.
properties
Name
Type
Description
address
string
The address of the account.
keys
Array
A two-dimensional array that defines the keys used for each role. Each role includes PrivateKey instance(s). 첫 번째 원소는 roleTransactionKey입니다. 두 번째 원소는 roleAccountUpdateKey입니다. 마지막 원소는 roleFeePayerKey입니다.
이하는 각 역할에 정의된 키를 직관적으로 사용하기 위해 키링에 정의된 게터(getter)입니다. 각 역할에 사용되는 키에 게터를 통해 더 쉽게 접근할 수 있습니다.
Name
Type
Description
roleTransactionKey
Array
(계정 업데이트 트랜잭션을 제외한) 트랜잭션 서명에 사용되는 roleTransactionKey입니다. keyring.roleTransactionkeykeys 속성의 첫 번째 요소를 반환합니다.
roleAccountUpdateKey
Array
계정 업데이트 트랜잭션 서명을 위해 사용되는 roleAccountUpdateKey입니다. keyring.roleAccountUpdateKeykeys 속성의 두 번째 요소를 반환합니다.
roleFeePayerKey
Array
이 roleFeePayerKey는 feePayer로 트랜잭션에 서명할 때 사용됩니다. keyring.roleFeePayerKeykeys 속성의 세 번째 요소를 반환합니다.

PrivateKey

const privateKey = new caver.wallet.keyring.privateKey('0x{private key}')
PrivateKey는 개인키 문자열을 포함하는 클래스입니다. Keyring 내 각 역할에 사용되는 개인키는 이 PrivateKey 인스턴스로 정의됩니다.
properties
Name
Type
Description
privateKey
string
개인키 문자열.

SignatureData

SignatureData는 서명 데이터를 포함한 클래스입니다. sign 또는 signMessage의 결과인 서명은 signatureData로서 반환됩니다. 아래와 같이 signatureData가 서명(들)을 포함하는 것을 확인할 수 있습니다.
const signature = new caver.wallet.keyring.signatureData(['0x1b', '0x2dfc6...', '0x15038...'])
properties
Name
Type
Description
v
String
ECDSA recovery id.
r
String
ECDSA signature r.
s
String
ECDSA signature s.

caver.wallet.keyring.generate

caver.wallet.keyring.generate([entropy])
무작위로 생성된 캐인키로 SingleKeyring 인스턴스를 생성합니다.
Parameters
Name
Type
Description
entropy
string
(optional) A random string to increase entropy.
Return Value
Type
Description
무작위로 생성된 하나의 키링 인스턴스가 반환됩니다.
Example
> caver.wallet.keyring.generate()
SingleKeyring {
_address: '0x8ecdfda0281f0d36518f89e0e2444c4f98b2e718',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.keyring.generateSingleKey

caver.wallet.keyring.generateSingleKey([entropy])
개인키 문자열을 생성합니다.
Parameters
Name
Type
Description
entropy
string
(optional) A random string to increase entropy.
Return Value
Type
Description
string
개인키 문자열이 반환됩니다.
Example
> caver.wallet.keyring.generateSingleKey()
'0x{private key}'

caver.wallet.keyring.generateMultipleKeys

caver.wallet.keyring.generateMultipleKeys(num [, entropy])
개인키 문자열들을 생성합니다.
Parameters
Name
Type
Description
num
number
개인키 문자열들의 수입니다.
entropy
string
(optional) A random string to increase entropy.
Return Value
Type
Description
Array
개인키들을 포함한 배열이 반환됩니다.
Example
> caver.wallet.keyring.generateMultipleKeys(3)
[
'0x{private key1}',
'0x{private key2}',
'0x{private key3}'
]

caver.wallet.keyring.generateRoleBasedKeys

caver.wallet.keyring.generateRoleBasedKeys(numArray [, entropy])
Generates a 2D array of which each array element contains keys defined for each role.
Parameters
Name
Type
Description
numArray
Array
An array containing the number of keys for each role.
entropy
string
(optional) A random string to increase entropy.
Return Value
Type
Description
Array
A 2D array of which each array element contains keys defined for each role is returned.
Example
> caver.wallet.keyring.generateRoleBasedKeys([2, 1, 3])
[
[
'0x{private key1}',
'0x{private key2}'
],
[
'0x{private key3}'
],
[
'0x{private key4}',
'0x{private key5}',
'0x{private key6}'
]
]

caver.wallet.keyring.create

caver.wallet.keyring.create(address, key)
파라미터로 키링 인스턴스를 생성합니다.
If key is a private key string, a SingleKeyring instance that uses a single private key is created. If key is an array containing private key strings, a MultipleKeyring instance that use multiple private keys is created. If key is a 2D array of which each element contains the private key(s) to be used for each role, a RoleBasedKeyring instance is created.
Parameters
Name
Type
Description
address
string
키링 주소입니다.
key
string \
Array
Return Value
Type
Description
Keyring
키링 인스턴스가 반환됩니다. Depending on the key parameter, it can be SingleKeyring, MultipleKeyring or RoleBasedKeyring.
Example
// Create singleKeyring which uses one private key
> caver.wallet.keyring.create('0x{address in hex}', '0x{private key}')
SingleKeyring {
_address: '0x30fcfa9679c7141a234c1324c7e0a8b715bdfc90',
_key: PrivateKey { _privateKey: '0x{private key}' }
}
// Create multipleKeyring which uses multiple private keys
> caver.wallet.keyring.create('0x{address in hex}', ['0x{private key1}', '0x{private key2}'])
MultipleKeyring {
_address: '0x30fcfa9679c7141a234c1324c7e0a8b715bdfc90',
_keys: [
PrivateKey { _privateKey: '0x{private key1}' },
PrivateKey { _privateKey: '0x{private key2}' }
]
}
// Create roleBasedKeyring which uses different private key(s) by roles
> const roleBasedKeys = [
['0x{private key1}', '0x{private key2}'],
['0x{private key3}', '0x{private key4}'],
['0x{private key5}', '0x{private key6}'],
]
> caver.wallet.keyring.create('0x{address in hex}', roleBasedKeys)
RoleBasedKeyring {
_address: '0x30fcfa9679c7141a234c1324c7e0a8b715bdfc90',
_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.keyring.createFromPrivateKey

caver.wallet.keyring.createFromPrivateKey(key)
Creates a SingleKeyring instance from a private key string or a KlaytnWalletKey.
Parameters
Name
Type
Description
key
string
This parameter can be either a private key or KlaytnWalletKey.
Return Value
Type
Description
SingleKeyring 인스턴스가 반환됩니다.
Example
// Create singleKeyring from private key string
> caver.wallet.keyring.createFromPrivateKey('0x{private key}')
SingleKeyring {
_address: '0xaa7b43f2eab01cfd787b07ce2f2fb5d6d20a8aa0',
_key: PrivateKey { _privateKey: '0x{private key}' }
}
// Create singleKeyring from KlaytnWalletKey
> caver.wallet.keyring.createFromPrivateKey('0x{private key}0x{type}0x{address in hex}')
SingleKeyring {
_address: '0xaa7b43f2eab01cfd787b07ce2f2fb5d6d20a8aa0',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.keyring.createFromKlaytnWalletKey

caver.wallet.keyring.createFromKlaytnWalletKey(klaytnWalletKey)
Creates a SingleKeyring instance from a KlaytnWalletKey string.
Parameters
Name
Type
Description
klaytnWalletKey
string
The KlaytnWalletKey string.
Return Value
Type
Description
The SingleKeyring instance is returned.
Example
> caver.wallet.keyring.createFromKlaytnWalletKey('0x{private key}0x{type}0x{address in hex}')
SingleKeyring {
_address: '0xaa7b43f2eab01cfd787b07ce2f2fb5d6d20a8aa0',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.keyring.createWithSingleKey

caver.wallet.keyring.createWithSingleKey(address, key)
주소와 개인키 문자열로부터 SingleKeyring 인스턴스를 생성합니다.
Parameters
Name
Type
Description
address
string
키링 생성을 위해 사용되는 주소입니다.
key
string
개인키 문자열입니다.
Return Value
Type
Description
The SingleKeyring instance is returned.
Example
> caver.wallet.keyring.createWithSingleKey('0x{address in hex}', '0x{private key}')
SingleKeyring {
_address: '0xaa7b43f2eab01cfd787b07ce2f2fb5d6d20a8aa0',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

caver.wallet.keyring.createWithMultipleKey

caver.wallet.keyring.createWithMultipleKey(address, key)
주소와 개인키 문자열로부터 MultipleKeyring 인스턴스를 생성합니다.
Parameters
Name
Type
Description
address
string
An address of keyring.
keyArray
Array
개인키 문자열들의 배열입니다.
Return Value
Type
Description
MultipleKeyring 인스턴스가 반환됩니다.
Example
> caver.wallet.keyring.createWithMultipleKey('0x{address in hex}', ['0x{private key1}', '0x{private key2}' ])
MultipleKeyring {
_address: '0x30fcfa9679c7141a234c1324c7e0a8b715bdfc90',
_keys: [
PrivateKey { _privateKey: '0x{private key1}' },
PrivateKey { _privateKey: '0x{private key2}' }
]
}

caver.wallet.keyring.createWithRoleBasedKey

caver.wallet.keyring.createWithRoleBasedKey(address, roledBasedKeyArray)
Creates a RoleBasedKeyring instance from an address and a 2D array of which each array element contains keys defined for each role.
Parameters
Name
Type
Description
address
string
An address of keyring.
roledBasedKeyArray
Array
각 역할에 대해 개인키 배열을 포함하고 있는 2차원 배열입니다.
Return Value
Type
Description
RoleBasedKeyring 인스턴스가 반환됩니다.
Example
> const roleBasedKeys = [
['0x{private key1}', '0x{private key2}'],
['0x{private key3}', '0x{private key4}'],
['0x{private key5}', '0x{private key6}'],
]
> caver.wallet.keyring.createWithRoleBasedKey('0x{address in hex}', roleBasedKeys)
RoleBasedKeyring {
_address: '0x30fcfa9679c7141a234c1324c7e0a8b715bdfc90',
_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.keyring.decrypt

caver.wallet.keyring.decrypt(keystore, password)
키스토어 v3 또는 v4 JSON을 복호화하고 복호화된 키링 객체를 반환합니다.
Parameters
Name
Type
Description
keystore
object
복호화할 키스토어 v3 또는 v4입니다.
password
string
암호화에 사용되는 비밀번호.
Return Value
Type
Description
Keyring
The decrypted keyring instance (SingleKeyring, MultipleKeyring or RoleBasedKeyring).
Example
// Decrypt keystroe v4 (encrypted single keyring)
> caver.wallet.keyring.decrypt({
version: 4,
id: '9c12de05-0153-41c7-a8b7-849472eb5de7',
address: '0xc02cec4d0346bf4124deeb55c5216a4138a40a8c',
keyring: [
{
ciphertext: 'eacf496cea5e80eca291251b3743bf93cdbcf7072efc3a74efeaf518e2796b15',
cipherparams: { iv: 'd688a4319342e872cefcf51aef3ec2da' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: 'c3cee502c7157e0faa42386c6d666116ffcdf093c345166c502e23bc34e6ba40',
n: 4096,
r: 8,
p: 1
},
mac: '4b49574f3d3356fa0d04f73e07d5a2a6bbfdd185bedfa31f37f347bc98f2ef26'
}
]
}, 'password')
SingleKeyring {
_address: '0xc02cec4d0346bf4124deeb55c5216a4138a40a8c',
_key: PrivateKey { _privateKey: '0x{private key}' }
}
// Decrypt keystroe v4 (encrypted multiple keyring)
> caver.wallet.keyring.decrypt({
version: 4,
id: '55da3f9c-6444-4fc1-abfa-f2eabfc57501',
address: '0x86bce8c859f5f304aa30adb89f2f7b6ee5a0d6e2',
keyring: [
{
ciphertext: '93dd2c777abd9b80a0be8e1eb9739cbf27c127621a5d3f81e7779e47d3bb22f6',
cipherparams: { iv: '84f90907f3f54f53d19cbd6ae1496b86' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '69bf176a136c67a39d131912fb1e0ada4be0ed9f882448e1557b5c4233006e10',
n: 4096,
r: 8,
p: 1,
},
mac: '8f6d1d234f4a87162cf3de0c7fb1d4a8421cd8f5a97b86b1a8e576ffc1eb52d2',
},
{
ciphertext: '53d50b4e86b550b26919d9b8cea762cd3c637dfe4f2a0f18995d3401ead839a6',
cipherparams: { iv: 'd7a6f63558996a9f99e7daabd289aa2c' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '966116898d90c3e53ea09e4850a71e16df9533c1f9e1b2e1a9edec781e1ad44f',
n: 4096,
r: 8,
p: 1,
},
mac: 'bca7125e17565c672a110ace9a25755847d42b81aa7df4bb8f5ce01ef7213295',
},
],
}, 'password')
MultipleKeyring {
_address: '0x86bce8c859f5f304aa30adb89f2f7b6ee5a0d6e2',
_keys: [
PrivateKey { _privateKey: '0x{private key1}' },
PrivateKey { _privateKey: '0x{private key2}' }
]
}
// Decrypt keystroe v4 (encrypted role-based keyring)
> caver.wallet.keyring.decrypt({
version: 4,
id: '55da3f9c-6444-4fc1-abfa-f2eabfc57501',
address: '0x86bce8c859f5f304aa30adb89f2f7b6ee5a0d6e2',
keyring: [
[
{
ciphertext: '93dd2c777abd9b80a0be8e1eb9739cbf27c127621a5d3f81e7779e47d3bb22f6',
cipherparams: { iv: '84f90907f3f54f53d19cbd6ae1496b86' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '69bf176a136c67a39d131912fb1e0ada4be0ed9f882448e1557b5c4233006e10',
n: 4096,
r: 8,
p: 1,
},
mac: '8f6d1d234f4a87162cf3de0c7fb1d4a8421cd8f5a97b86b1a8e576ffc1eb52d2',
},
{
ciphertext: '53d50b4e86b550b26919d9b8cea762cd3c637dfe4f2a0f18995d3401ead839a6',
cipherparams: { iv: 'd7a6f63558996a9f99e7daabd289aa2c' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '966116898d90c3e53ea09e4850a71e16df9533c1f9e1b2e1a9edec781e1ad44f',
n: 4096,
r: 8,
p: 1,
},
mac: 'bca7125e17565c672a110ace9a25755847d42b81aa7df4bb8f5ce01ef7213295',
},
],
[
{
ciphertext: 'f16def98a70bb2dae053f791882f3254c66d63416633b8d91c2848893e7876ce',
cipherparams: { iv: 'f5006128a4c53bc02cada64d095c15cf' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '0d8a2f71f79c4880e43ff0795f6841a24cb18838b3ca8ecaeb0cda72da9a72ce',
n: 4096,
r: 8,
p: 1,
},
mac: '38b79276c3805b9d2ff5fbabf1b9d4ead295151b95401c1e54aed782502fc90a',
},
],
[
{
ciphertext: '544dbcc327942a6a52ad6a7d537e4459506afc700a6da4e8edebd62fb3dd55ee',
cipherparams: { iv: '05dd5d25ad6426e026818b6fa9b25818' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '3a9003c1527f65c772c54c6056a38b0048c2e2d58dc0e584a1d867f2039a25aa',
n: 4096,
r: 8,
p: 1,
},
mac: '19a698b51409cc9ac22d63d329b1201af3c89a04a1faea3111eec4ca97f2e00f',
},
{
ciphertext: 'dd6b920f02cbcf5998ed205f8867ddbd9b6b088add8dfe1774a9fda29ff3920b',
cipherparams: { iv: 'ac04c0f4559dad80dc86c975d1ef7067' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '22279c6dbcc706d7daa120022a236cfe149496dca8232b0f8159d1df999569d6',
n: 4096,
r: 8,
p: 1,
},
mac: '1c54f7378fa279a49a2f790a0adb683defad8535a21bdf2f3dadc48a7bddf517',
},
],
],
}, 'password')
RoleBasedKeyring {
_address: '0x86bce8c859f5f304aa30adb89f2f7b6ee5a0d6e2',
_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}' }
]
]
}
// Decrypt keystroe v3 JSON
> caver.wallet.keyring.decrypt({
version: 3,
id: '43f99d36-3905-40e6-bff8-ff0dfc380037',
address: '0xc02cec4d0346bf4124deeb55c5216a4138a40a8c',
crypto: {
ciphertext: 'f7296e68807837a5318502c097276a89d58d91b85e45e692aee284a27bcd0955',
cipherparams: { iv: '03fd985d07777601078840c73cc6f7f3' },
cipher: 'aes-128-ctr',
kdf: 'scrypt',
kdfparams: {
dklen: 32,
salt: '46f85271c43fa64ab3338c5235f1d5073bc9379d9b7ba6065c89afb816d83a8a',
n: 4096,
r: 8,
p: 1
},
mac: '947f13cd1481fa5ba186e59418ef7600fa69e9830054d59e4d5dc67176e1f967'
}
}, 'password')
SingleKeyring {
_address: '0xc02cec4d0346bf4124deeb55c5216a4138a40a8c',
_key: PrivateKey { _privateKey: '0x{private key}' }
}

keyring.getPublicKey

keyring.getPublicKey()
공개키 문자열(들)을 반환합니다. If keyring is an instance of SingleKeyring, getPublicKey returns a public key string. If keyring is an instance of MultipleKeyring, getPublicKey returns an array of public key strings. If keyring is an instance of RoleBasedKeyring, getPublicKey returns a two-dimensional array in which the public key(s) used for each role is defined as an array.
Parameters
Name
Type
Description
compressed
boolean
(optional) Whether in compressed format or not (default: false).
Return Value
Type
Description
string \
Array
Example
// Get public key with singleKeyring
> keyring.getPublicKey()
'0x49b2a...'
// Get public key with multipleKeyring
> keyring.getPublicKey()