[caver-js] API 참조 문서 - 2

박세연·2020년 11월 11일
1

Klaytn SDK

목록 보기
3/4

2. caver.wallet

caver.wallet은 keyring 인스턴스를 in-memory wallet에서 관리하는 packagedlek. caver.wallet은 SingleKeyring, MultipleKeyring, and RoleBasedKeyring을 accept하고, 주소별로 관리한다.

class

KeyringContainer

caver.wallet

KeyringContainer 는 kering인스턴스들을 관리한다.
length 속성에 keyringContainer안의 keyrings의 숫자를 저장한다.

caver.wallet.generate

랜덤한 privateKey를 사용해서 KeyringContainer에서 SingleKeyring의 인스턴스 생성

caver.wallet.generate(numberOfKeyrings [, entropy])
// numberOfKeyrings: 만들 SingleKeyring 인스턴스의 수
// entropy: entropy를 증가시키기위한 임의의 문자열?
// return: 만들어진 주소의 배열 (배열 길이는 numberOfKeyrings)
// 예시
const Caver = require('caver-js')
const caver = new Caver('https://api.baobab.klaytn.net:8651/')

async function testFunction() {
    console.log(caver.wallet.generate(3, caver.utils.randomHex(32))) // generate with entropy
}
testFunction()

caver.wallet.newKeyring

인자로 주어진 주소와 키의 keyring인스턴스를 만들고 caver.wallet에 추가

caver.wallet.newKeyring(address, key)
// key: privatekey 문자열 | privatekey 배열 | 2차원배열(role + keys)
// return: caver.wallet에 추가된 keyring 인스턴스
//예시
const Caver = require('caver-js')
const caver = new Caver('https://api.baobab.klaytn.net:8651/')

async function testFunction() {
    const SingleKeyring = caver.wallet.newKeyring('0x06545b70b18068ccf5ee6eb5eb1f465c5dbe4f05', '0x{private key}')
    console.log(SingleKeyring)

    const MultiKeyring = caver.wallet.newKeyring('0x4889fae0e032022cbcbe3da60bea36dd3cd25b18', ['0x{private key1}','0x{private key2}','0x{private key3}'])
    console.log(MultiKeyring)
}
testFunction()

caver.wallet.updateKeyring

caver.wallet의 keyring을 업데이트한다.

caver.wallet.updateKeyring(keyring)
// keyring: new keyring (SingleKeyring, MultipleKeyring or RoleBasedKeyring)
// return: caver.wallet에 업데이트된 keyring을 반환

caver.wallet.getKeyring

caver.wallet에서 인자로 받은 주소와 함께 저장된 keyring인스턴스를 반환한다.

caver.wallet.getKeyring(address)

caver.wallet.add

caver.wallet에 keyring 인스턴스를 추가한다.

caver.wallet.add(keyring)

만약 이미 caver.wallet에 새로 추가하려는 keyring의 주소가 존재하면 error가 반환됨. 이미 존재하는 keyring을 바꾸려면 updateKeyring을 써야한다.

caver.wallet.remove

caver.wallet에서 인자와 대응하는 주소의 keyring을 지운다.

caver.wallet.remove(address)
// return(boolean): caver.wallet에서 해당 keyring을 지웠으면 true 반환

caver.wallet.signMessage

caver.wallet에 저장된 keyring을 사용해서 메시지에 sign한다.

// this calculates a Klaytn-specific signature
sign(keccak256("\x19Klaytn Signed Message:\n" + len(message) + message)))
caver.wallet.signMessage(address, message, role [, index])
// address: 서명에 사용할 keyring의 주소
// message: sign할 메시지
// role: key의 role을 나타내는 숫자 (caver.wallet.keyring.role)
// index(option): 사용할 private key의 index. index를 정의하지 않으면 모든 private key를 사용한다.
// 예시
const Caver = require('caver-js')
const caver = new Caver('https://api.baobab.klaytn.net:8651/')

async function testFunction() {
 
    const MultiKeyring = caver.wallet.newKeyring('0x4889fae0e032022cbcbe3da60bea36dd3cd25b18', ['0x{private key1}','0x{private key2}','0x{private key3}'])
    // caver.wallet에 Multikeyring 추가한다.
   
    const signMessage = caver.wallet.signMessage('0x4889fae0e032022cbcbe3da60bea36dd3cd25b18', 'message to sign', caver.wallet.keyring.role.roleTransactionKey)
    // index 설정 안했으므로 모든 privatekey로 서명
    // const signMessage = caver.wallet.signMessage('0x386a4bb40abbfaa59cecdc3ced202475895fd569', 'message to sign', caver.wallet.keyring.role.roleTransactionKey, 1)
    // 이렇게 하면 index 1의 privatekey로만 서명

    console.log(signMessage)
}
testFunction()

예를들어 index지정해서 1개로만 서명하면 signatures의 SignatureData는 하나만 출력됨.

caver.wallet.sign

caver.wallet의 keyring을 사용해서 트랜잭션의 sender로서 트랜잭션에 서명하고 트랜잭션 object의 signatures에 추가한다.

caver.wallet.sign(address, transaction [, index] [, hasher])
// index는 위와 역할 동일
// hasher: 트랜잭션 해시값을 얻는 해시 함수. 여기에 인자가 전달된다면 해당 함수로 트랜잭션 해시를 계산한다? 없다면 default method
// return: 서명된 트랜잭션을 리턴함.

Account Update 트랜잭션은 roleTransactionKey를 사용하고, 다른 나머지는 roleTransactionKey로 서명한다.

caver.wallet.signAsFeePayer

caver.wallet의 keyring을 사용해서 트랜잭션의 fee payer로서 서명하고 트랜잭션의 feePayerSignatures로 추가한다.

caver.wallet.signAsFeePayer(address, transaction [, index] [, hasher])
// return:  서명된 트랜잭션을 리턴. 서명한 결과는 transaction.feePayerSignatures에 추가됨.

3. caver.wallet.keyring

class

SingleKeyring

const keyring = new caver.wallet.keyring.singleKeyring(address, key)
// address와 private key를 이용해서 singleKeyring 인스턴스를 만든다.
// SingleKeyring은 역할이 할당되지 않은 private key로 사용한다.

MultiKeyring

const keyring = new caver.wallet.keyring.multipleKeyring(address, keys)
// multiple private key를 가진 계정의 keyring을 생성
// keys: key들의 배열

RoleBasedKeyring

const keyring = new caver.wallet.keyring.roleBasedKeyring(address, keys)
// keys: 각 key별로 역할을 포함한 2차원 배열이 입력된다.
// [ [roleTransactionKey], [roleAccountUpdateKey], [roleFeePayerKey] ]
// 각 역할 부분에 private key를 입력해서 인자로 전달한다.

PrivateKey

const privateKey = new caver.wallet.keyring.privateKey('0x{private key}')
// privateKey인스턴스를 정의한다.

SignatureData

signature은 sign 혹은 signMessage의 결과로서 signatureData를 return한다.

const signature = new caver.wallet.keyring.signatureData(['0x1b', '0x2dfc6...', '0x15038...'])
// v: ECDSA 리커버리 id
// r: ECDSA 서명 r
// s: ECDSA 서명 s

caver.wallet.keyring.generate

SingleKeyring 인스턴스를 랜덤한 privateKey를 이용해서 생성한다.

caver.wallet.keyring.generate([entropy])
// entry는 option
// return: SingleKeyring

caver.wallet.keyring.generateSingleKey

caver.wallet.keyring.generateSingleKey([entropy])
// return: privateKey 문자열

caver.wallet.keyring.generateMultipleKeys

caver.wallet.keyring.generateMultipleKeys(num [, entropy])
// return: num 개수 만큼의 privateKey를 생성해서 return

caver.wallet.keyring.generateRoleBasedKeys

caver.wallet.keyring.generateRoleBasedKeys(numArray [, entropy])
// return: 각 위치에 전달된 인자의 개수만큼 대응하는 개수의 2차원 배열로 private key 출력
> 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)
// return: 전달된 addresss와 privatekey에 대응하는 Keyring

caver.wallet.keyring.createFromPrivateKey

caver.wallet.keyring.createFromPrivateKey(key)
// return: 전달된 privatekey로 SingleKeyring 인스턴스를 생성
// 여기서 파라미터는 KlaytnWalletKey도 될 수 있다.

caver.wallet.keyring.createFromKlaytnWalletKey

caver.wallet.keyring.createFromKlaytnWalletKey(klaytnWalletKey)
// return: 전달된 KlaytnWalletKey로 SingleKeyring 인스턴스 생성

caver.wallet.keyring.createWithSingleKey

caver.wallet.keyring.createWithSingleKey(address, key)
// return: address와 privateKey에 대응하는 SingleKeyring 생성

caver.wallet.keyring.createWithMultipleKey

caver.wallet.keyring.createWithMultipleKey(address, key)
// return: MultiKeyring 생성

caver.wallet.keyring.createWithRoleBasedKey

caver.wallet.keyring.createWithRoleBasedKey(address, roledBasedKeyArray)
// return: 2차원 배열로 전달된 roleBasedKeyArray에 대응하는 RoleBasedKeyring

caver.wallet.keyring.decrypt

caver.wallet.keyring.decrypt(keystore, password)
// keystore.json파일을 decrypt하고 해당 keystor파일과 password에 대응하는 계정의 keyring 생성

keyring.getPublicKey

keyring.getPublicKey()
// return: 해당 keyring의 PublicKey

keyring.copy

keyring.copy()
// return: 해당 keyring인스턴스를 복사해서 return

keyring.sign

keyring.sign(transactionHash, chainId, role [, index])
// transactionHash: 서명할 트랜잭션의 해시값
// chainId: Klaytn 블록체인 플랫폼의 chainId('0x2810'?)
// role: caver.wallet.keyring.role
// index: 옵션(몇번째 index의 private key로 서명할지)
// return: SignatureData배열

keyring.signMessage

keyring.signMessage(message, role [, index])
// 위의 caver.wallet.signMessage와 비슷함
// keyring을 지정하고 함수 호출하는거만 다름(그래서 파라미터에 address를 넣을 필요가 없음)

keyring.getKeyByRole

keyring.getKeyByRole(role)
// role: key role을 전달 (caver.wallet.keyring.role.roleTransactionKey | caver.wallet.keyring.role.roleAccountUpdateKey | caver.wallet.keyring.role.roleFeePayerKey)
// 해당 role 위치의 privateKey인스턴스, 혹은 privateKey인스턴스의 배열을 return

keyring.getKlaytnWalletKey

keyring.getKlaytnWalletKey()
// return: 해당 keyring의 KlaytnWalletKey를 반환

keyring.toAccount

keyring.toAccount([options])
// return: 계정(Account)정보를 반환함

이거는 Klaytn account의 AccountKey를 업데이트 하기위해서 account인스턴스를 가져온다.

keyring.encrypt

keyring.encrypt(password [, options])
// 해당 Keyring을 암호화하고 Keystore(V4)형식으로 return함.

keyring.encryptV3

keyring.encryptV3(password [, options])
// 해당 Keyring을 암호화하고 Keystore(V3)형식으로 return함.

keyring.isDecoupled

keyring.isDecoupled()
// 해당 Keyring이 decoupled key이면 true를 return
profile
안녕하세요

0개의 댓글

관련 채용 정보