본문으로 건너뛰기

caver.wallet

caver.wallet은 인메모리 지갑에서 Keyring 인스턴스를 관리하는 패키지입니다. caver.wallet은 모든 SingleKeyring, MultipleKeyring, RoleBasedKeyring을 수용하여 주소별로 관리합니다.

Class

KeyringContainer


caver.wallet

KeyringContainerSingleKeyring, MultipleKeyring, RoleBasedKeyring 인스턴스를 관리하는 클래스에 해당하는 인스턴스입니다. Caver가 인스턴스화되면 caver.wallet에 KeyringContainer 인스턴스를 생성합니다. caver.wallet을 통해 인메모리 지갑에 Keyring 인스턴스를 저장하고 관리할 수 있습니다.

속성

이름유형설명
lengthNumberkeyringContainer에 있는 Keyring의 수입니다.

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)

주어진 매개변수로 Keyring 인스턴스를 생성하고 caver.wallet에 추가합니다.

key가 개인키 문자열인 경우, 단일 개인키를 사용하는 SingleKeyring 인스턴스가 만들어집니다. key가 개인키 문자열을 포함하는 배열이면 여러 개인키를 사용하는 MultipleKeyring 인스턴스가 만들어집니다. key가 각 요소에 각 역할에 사용할 개인키가 포함된 2D 배열인 경우, RoleBasedKeyring 인스턴스가 만들어집니다. 생성된 Keyring은 caver.wallet에 추가됩니다.

매개변수

이름유형설명
addressString주소 문자열입니다.
Keystring | Array개인 키 문자열, 개인 키 배열 또는 각 배열 요소에 각 role에 대해 정의된 키가 포함된 2D 배열입니다.

리턴 값

유형설명
objectcaver.wallet에 추가된 Keyring 인스턴스(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)가 반환됩니다.

예시


// 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 인스턴스(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)가 파라미터로 전달되면 caver.wallet에 저장된 기존 Keyring 중 주어진 keyring 인스턴스의 address 속성과 일치하는 것을 찾아서 지정된 것으로 대체합니다. 일치하는 Keyring을 찾지 못하면 에러가 발생합니다.

매개변수

이름유형설명
Keyringobjectcaver.wallet에 저장할 새 Keyring(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)을 입력합니다.

리턴 값

유형설명
object업데이트된 Keyring(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)이 caver.wallet에 저장되어 있습니다.

예시


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

caver.wallet.getKeyring


caver.wallet.getKeyring(address)

caver.wallet의 주소에 해당하는 Keyring 인스턴스를 반환합니다.

매개변수

이름유형설명
addressString쿼리할 Keyring의 주소입니다.

리턴 값

유형설명
objectcaver.wallet에 저장된 검색된 Keyring 인스턴스(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)입니다.

예시


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

caver.wallet.isExisted


caver.wallet.isExisted(address)

주소와 일치하는 Keyring이 있으면 true를 반환합니다.

매개변수

이름유형설명
addressString존재 여부를 확인할 Keyring의 주소입니다.

리턴 값

유형설명
booltrue는 주소와 일치하는 Keyring이 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을 업데이트하세요.

매개변수

이름유형설명
Keyringobjectcaver.wallet에 추가할 Keyring 인스턴스(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)입니다.

리턴 값

유형설명
objectcaver.wallet에 추가된 Keyring(SingleKeyring, MultipleKeyring 또는 RoleBasedKeyring)입니다.

예시


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

caver.wallet.remove


caver.wallet.remove(address)

주어진 Keyring의 주소와 일치하는 주소가 있는 caver.wallet에서 Keyring을 삭제합니다.

매개변수

이름유형설명
addressStringcaver.wallet에서 삭제할 Keyring의 주소입니다.

리턴 값

유형설명
boolcaver.wallet에서 Keyring이 제거되면 true.

예시


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

caver.wallet.signMessage


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

caver.wallet에 저장된 Keyring을 사용하여 클레이튼 전용 접두사로 메시지에 서명합니다. 이를 통해 클레이튼 전용 서명을 계산합니다:


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클레이튼 전용 접두사가 있는 메시지의 해시입니다.
signaturesArraySignatureData의 배열입니다.
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])

트랜잭션의 sender로 트랜잭션에 서명하고 caver.wallet의 Keyring을 사용하여 트랜잭션 객체에 signatures을 추가합니다.

계정 업데이트 트랜잭션의 경우, roleTransactionKey를 사용하고, 그렇지 않은 경우 roleTransactionKey를 사용하세요. 사용자가 index를 정의하지 않은 경우, caver.wallet.sign은 역할에서 사용하는 모든 개인 키를 사용하여 트랜잭션에 서명합니다. index가 정의된 경우, caver.wallet.sign은 주어진 인덱스에서 하나의 개인 키만 사용하여 트랜잭션에 서명합니다.

매개변수

이름유형설명
addressString사용할 Keyring의 주소입니다.
transactionsobjectTransaction의 인스턴스입니다.
indexNumber(선택 사항) 사용하려는 개인키의 인덱스입니다. 인덱스는 각 역할에 대해 정의된 개인 키 배열의 길이보다 작아야 합니다. 인덱스가 정의되지 않은 경우 이 메서드는 모든 개인 키를 사용합니다.
해시어Function(선택 사항) 트랜잭션 해시를 가져오는 해시 함수입니다. 매개변수로 hasher를 지정하면 caver-js에 구현된 트랜잭션 해시 계산의 기본 방법 대신 트랜잭션 해시를 계산합니다. 트랜잭션 해시 생성 기본 메서드에 대한 자세한 내용은 Basic를 참고하세요.

리턴 값

promiseobject를 반환합니다: 서명된 트랜잭션입니다.

유형설명
object서명된 트랜잭션 인스턴스. 서명은 transaction.signatures에 추가됩니다.

트랜잭션 유형별 필드에 대한 자세한 내용은 caver.transaction를 참조하세요.

예시


// 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])

트랜잭션의 fee payer로 트랜잭션에 서명하고 caver.wallet의 Keyring을 사용하여 트랜잭션 객체에 feePayerSignatures를 추가합니다.

수수료 납부자로서 트랜잭션에 서명하려면 roleFeePayerKey를 사용하세요. 사용자가 index를 정의하지 않은 경우, caver.wallet.signAsFeePayer는 역할이 사용하는 모든 개인 키를 사용하여 트랜잭션에 서명합니다. index가 정의된 경우, caver.wallet.signAsFeePayer는 주어진 인덱스에서 하나의 개인 키만 사용하여 트랜잭션에 서명합니다.

transaction.feePayer가 정의되지 않은 경우 caver.wallet에서 생성된 Keyring의 주소가 할당됩니다.

매개변수

이름유형설명
addressString사용할 Keyring의 주소입니다.
transactionsobjectFeeDelegatedTransaction의 인스턴스입니다.
indexNumber(선택 사항) 사용하려는 개인키의 인덱스입니다. 인덱스는 각 역할에 대해 정의된 개인키 배열의 길이보다 작아야 합니다. 인덱스가 정의되지 않은 경우 이 메서드는 모든 개인 키를 사용합니다.
hashFunction(선택 사항) 트랜잭션 해시를 가져오는 함수입니다. hasher가 파라미터로 정의된 경우 caver-js의 기본 구현 대신 트랜잭션 해시를 가져오는 데 사용됩니다.

리턴 값

promiseobject를 반환합니다: 서명된 트랜잭션입니다.

유형설명
object서명된 트랜잭션 인스턴스입니다. 서명 결과는 transaction.feePayerSignatures에 추가됩니다.

트랜잭션 유형별 필드에 대한 자세한 내용은 caver.transaction를 참조하세요.

예시


// 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'
}

Make this page better