계정 생성과 관리
이 페이지는 Wallet API로 Klaytn 계정을 생성하고 관리하는 방법을 안내합니다.
튜토리얼에 앞서
API 호출에 사용되는
x-chain-id
값은 8217(Cypress) 또는 1001(Baobab)입니다.API 호출에 필요한 필수 파라미터는 각 예시에 설명됩니다.
API 호출 시 사용자가 입력해야 하는 값은 중괄호 1개({}
)로 표시합니다. 사용자가 입력해야 하는 값은 아래 테이블과 같습니다.
chain-id
8217 또는 1001
Cypress(Klaytn 메인넷) 또는 Baobab(Klaytn 테스트넷)
access-key-id
인증 아이디
KAS Console > Security > Credential에서 발급받은 accessKeyId
secret-access-key
인증 비밀번호
KAS Console > Security > Credential에서 발급받은 secretAccessKey
krn
(optional) 계정 저장소의 ID
기본 계정 저장소 사용 시 불필요
API 인증 키가 있으면 모든 KAS 서비스를 사용할 수 있으며 Wallet API를 호출해 만든 Klaytn 계정에 대한 모든 권한을 소유합니다. 모든 권한에는 Klaytn 계정의 자산(KLAY 등) 이동이나 트랜잭션 전송 및 실행 권한이 포함됩니다. 만약 API 인증 키에 타인이 접근한다면 Klaytn 계정 권한을 탈취당해 원치 않는 트랜잭션이 발생할 수 있습니다.
KAS/Klaytn 계정 보안을 위해 KAS API 인증 키(Secret Access Key)를 타인과 함부로 공유하지 말고 주의해 관리하십시오.
계정 저장소 생성
KAS는 여러 Klaytn 계정을 관리하는 계정 저장소를 제공합니다. KAS를 사용하려면 여러분은 KAS Console에서 계정 저장소를 만들고, 계정 생성 API로 콘솔에서 만든 계정 저장소에 새로운 Klaytn 계정을 만들어야 합니다. 여러분은 KAS Console에서 하나 이상의 계정 저장소를 생성할 수 있으며, 각 계정 저장소의 KRN값을 Klaytn 계정 생성 API 호출 헤더의 x-krn
에 입력하면 해당 계정 저장소에 새로운 Klaytn 계정을 만들 수 있습니다.
Klaytn 계정
블록체인 플랫폼인 Klaytn에서 KLAY, FT, NFT와 같은 가상자산을 소유, 거래하거나 스마트 컨트랙트를 배포하고 실행하는 주체입니다. Klaytn 계정에 관한 자세한 내용은 Klaytn Docs의 계정을 확인하십시오.
기본 계정 저장소
기본 계정 저장소란 KAS API를 호출 시 사용할 계정 저장소를 별도로 지정하지 않을 때 기본으로 사용하는 계정 저장소입니다. API 호출 시 헤더의
x-krn
에 사용할 계정 저장소의 KRN을 입력하지 않으면 기본 계정 저장소에 있는 Klaytn 계정이 사용됩니다. 기본 계정 저장소는 KAS Console > Service > Wallet > Account Pools 화면에서 확인할 수 있으며DEFAULT
태그가 붙습니다.여러분이 가장 먼저 생성한 계정 저장소가 기본으로 자동 지정됩니다. 예를 들어, 여러분이 KAS Console에서 계정 저장소 "A"를 만들었다면, 이후 API 호출 시 사용할 계정 자장소를 별도로 지정하지 않을 경우 "A" 계정 저장소에 있는 Klaytn 계정이 API 호출에 사용됩니다. 만약 계정 저장소가 없는 상태에서 Klaytn 계정을 생성하는 API를 호출하면 KAS는 기본 계정 저장소를 먼저 생성한 후 여기에 여러분이 생성한 Klaytn 계정을 자동 저장합니다.
1. Account Pools 생성
KAS Console > Service > Wallet > Account Pools 메뉴에서 [생성]을 클릭합니다. 아래와 같이 Klaytn 계정 저장소를 생성하는 화면이 나타납니다.

2. 계정 저장소 생성
Klaytn 계정 저장소를 만듭니다. 계정 저장소의 이름은 현재 KAS 계정의 다른 계정 저장소 이름과 중복되지 않아야 합니다.

3. 계정 저장소 확인
생성한 계정 저장소는 계정 저장소 목록에서 확인할 수 있습니다.

Klaytn 계정 생성
API 호출
Klaytn 계정 생성 API를 아래와 같이 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
//KAS에서 제공하는 기본 계정 저장소를 사용하는 예시이며 `x-krn` 헤더 파라미터를 생략
curl --location --request POST "https://wallet-api.klaytnapi.com/v2/account" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
//여러분이 만든 계정 저장소를 사용하는 예시이며 `x-krn` 헤더 파라미터 포함
curl --location --request POST "https://wallet-api.klaytnapi.com/v2/account" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
--header "x-krn: krn:8217:wallet:6698d79e-78ee-439a-815d-f293ec6ae736:account-pool:ap1"
API 응답
Klaytn 계정 생성 API의 응답은 아래와 같습니다.
//KAS 기본 저장소에 계정을 만들었을 때 응답 예시
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"chainId": 1001,
"createdAt": 1599187293,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0x4cbbcb974e32a7960e1b356edf60087613101919ed83199f12e872cba068a50f",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x04cdccfb99b2905561e3dd886687b429a004718f11b04914f17ce68fd3a0db46c598a45da85caa61fe84cb78a0f2eaa9983ec7b8805a93ef9428eb1350a8558237",
"updatedAt": 1599187293
}
//여러분이 만든 계정 저장소에 계정을 만들었을 때 응답 예시
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"chainId": 1001,
"createdAt": 1599187293,
"keyId": "krn:8217:wallet:6698d79e-78ee-439a-815d-f293ec6ae736:account-pool:ap1:0x4cbbcb974e32a7960e1b356edf60087613101919ed83199f12e872cba068a50f",
"krn": "krn:8217:wallet:6698d79e-78ee-439a-815d-f293ec6ae736:account-pool:ap1",
"publicKey": "0x04cdccfb99b2905561e3dd886687b429a004718f11b04914f17ce68fd3a0db46c598a45da85caa61fe84cb78a0f2eaa9983ec7b8805a93ef9428eb1350a8558237",
"updatedAt": 1599187293
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 기본 계정 생성을 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
Klaytn 계정 조회
Klaytn 계정 조회 API는 생성된 Klaytn 계정의 정보를 조회할 때 사용됩니다.
API 호출
계정 EOA를 입력하고 Klaytn 계정 조회 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request GET "https://wallet-api.klaytnapi.com/v2/account/0xa809284C83b901eD106Aba4Ccda14628Af128e14" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
Klaytn 계정 조회 API의 응답은 아래와 같습니다.
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"chainId": 1001,
"createdAt": 1599187293,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0x4cbbcb974e32a7960e1b356edf60087613101919ed83199f12e872cba068a50f",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x04cdccfb99b2905561e3dd886687b429a004718f11b04914f17ce68fd3a0db46c598a45da85caa61fe84cb78a0f2eaa9983ec7b8805a93ef9428eb1350a8558237",
"updatedAt": 1599187293
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 계정 조회를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
Klaytn 계정 목록 조회
Klaytn 계정 목록 조회 API는 생성된 Klaytn 계정 목록을 조회할 때 사용됩니다.
API 호출
Klaytn 계정 목록 조회 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
쿼리 파라미터
커서 방식 페이지네이션을 사용해 API 응답값을 받아올 수 있습니다. 검색 범위를 초단위로 지정할 수 있습니다.
curl --location --request GET "https://wallet-api.klaytnapi.com/v2/account?&size=100&cursor=&from-timestamp=1592360291&to-timestamp=15991809920" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
Klaytn 계정 목록 조회 API의 응답은 아래와 같습니다.
{
"cursor": "",
"items": [
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"chainId": 1001,
"createdAt": 1599187293,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0x4cbbcb974e32a7960e1b356edf60087613101919ed83199f12e872cba068a50f",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x04cdccfb99b2905561e3dd886687b429a004718f11b04914f17ce68fd3a0db46c598a45da85caa61fe84cb78a0f2eaa9983ec7b8805a93ef9428eb1350a8558237",
"updatedAt": 1599187293
},
{
"address": "0x78B123CCCCd50f41E3192a60e6ED92B15E21b1B5",
"chainId": 1001,
"createdAt": 1599187194,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0x6c4419647e7724853f9e50b0c54b5985d0870470ac37b3ef865e62c3ccfa4ea4",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x0463cc38f08dd15dfd416966e9d0da93942e26d2a9a9bcac08d614f487f94a7e46e4418d1acda9e21706f19c917486de40c974eb20c12a2eca2eea91895499d379",
"updatedAt": 1599187194
},
...
,
{
"address": "0x7ec5169EA28B2e3fFEF143a3513D7eC1CeFF2cB4",
"chainId": 1001,
"createdAt": 1599187161,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0xd3ee56e2616c8d412918e7f0e9222c805aacf5bad6d84b70b83c2229d61f21c9",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x043ccf257d2ad3f8c3b2128969302efc6bf59d8cd8e578bcfdac8a4ac9cea6d4747350c98edaec5d23fafa9b3288a3b45816d2e9b3bb28443cc2486ad6bca652f1",
"updatedAt": 1599187161
}
]
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 계정 목록 조회를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
Klaytn 계정 삭제
Klaytn 계정 삭제 API는 Klaytn 계정을 삭제할 때 사용됩니다.
Klaytn 계정을 삭제하면 해당 계정으로는 서명할 수 없습니다.
API 호출
삭제할 계정 주소(EOA)를 입력하고 Klaytn 계정 삭제 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request DELETE "https://wallet-api.klaytnapi.com/v2/account/0xa809284C83b901eD106Aba4Ccda14628Af128e14" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
Klaytn 계정 삭제 API의 응답은 아래와 같습니다.
{
"status": "deleted"
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 계정 삭제를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
Klaytn 계정 비활성화
Klaytn 계정 비활성화 API는 생성된 Klaytn 계정을 비활성화할 때 사용됩니다.
API 호출
비활성화할 계정 주소(EOA)를 입력하고 Klaytn 계정 비활성화 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request PUT "https://wallet-api.klaytnapi.com/v2/account/0xa809284C83b901eD106Aba4Ccda14628Af128e14/disable" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
Klaytn 계정 비활성화 API의 응답은 아래와 같습니다.
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"updatedAt": 1599187344
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 계정 비활성화를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
Klaytn 계정 활성화
Klaytn 계정 활성화 API는 생성된 Klaytn 계정을 활성화할 때 사용됩니다.
API 호출
활성화할 계정 주소(EOA)를 입력하고 Klaytn 계정 활성화 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request GET "https://wallet-api.klaytnapi.com/v2/account/0xa809284C83b901eD106Aba4Ccda14628Af128e14/enable" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
Klaytn 계정 활성화 API의 응답은 아래와 같습니다.
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"updatedAt": 1599187359
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 계정 활성화를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
특정 트랜잭션 서명
Klaytn 계정으로 특정 트랜잭션 ID를 가진 트랜잭션에 서명합니다. 이 API는 트랜잭션이 다중 서명을 받아야 할 때 사용하는 API입니다. 트랜잭션이 다중 서명을 받아야 하는 상황이 아니라면 Wallet API가 여러분을 대신해 자동으로 트랜잭션에 서명하므로 이 API를 사용할 필요가 없습니다.
API 호출
서명하려는 Klaytn 계정 주소(EOA)와 서명을 받을 트랜잭션의 ID값을 입력하고 트랜잭션 서명 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request POST "https://wallet-api.klaytnapi.com/v2/account/0xa809284C83b901eD106Aba4Ccda14628Af128e14/tx/{transaction-id}/sign" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
트랜잭션 서명 API의 응답은 아래와 같습니다. ECDSA 서명 정보(R,S)와 공개키 복원정보(V)를 반환합니다.
{
"R": "0x670a63ca525b80f67cd412a88ffb5cabb84616fb4cb43ff827552586fc722403",
"S": "0x2f20ad3f4b3c2483a4ae4213a871e404f7214ffd84845fad022c3316eb0af09b",
"V": "0x7f6"
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 트랜잭션 사인을 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
공개키로 계정 정보 조회
이 API는 Wallet API를 통해 생성한 Klaytn 계정 중에서 특정 공개키(Public Key)를 가진 계정 정보를 조회합니다.
API 호출
공개키를 입력하고 이 공개키를 가진 Klaytn 계정 정보를 조회하는 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request GET "https://wallet-api.klaytnapi.com/v2/pubkey/0x049e00f9fbc12f01./account" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}"
API 응답
공개키를 사용한 Klaytn 계정 조회 API의 응답은 아래와 같습니다.
{
"items": [
{
"address": "0x0b7caaf70e7A0a5399041c64711E535CE8B3cf7d",
"chainId": 1001
},
{
"address": "0xc6C9356887b7F7887918Bf577417E5D8De253295",
"chainId": 1001
}
]
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 공개키 연관 계정 조회를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
내 계정을 다중 서명 계정으로 업데이트
다중 서명 계정이란 다중 서명 키를 가진 Klaytn 계정입니다. 여러 계정이 트랜잭션에 서명해야 하는 다중 서명 트랜잭션을 보내려면 다중 서명 계정을 사용해야 합니다. KAS도 Klaytn과 마찬가지로 다중 서명 트랜잭션을 지원합니다. KAS에서 다중 서명 트랜잭션을 보내려면 여러분의 Klaytn 계정 키가 다중 서명 키여야 합니다.
다중 서명 계정을 간단히 설명하면, 다중 서명을 위해 여러 키(개인키-공개키 쌍)을 가진 계정이며, 이 키들은 각각 다른 Klaytn 계정들이 소유하고 있습니다. 각 키에는 가중치(weight)를 설정할 수 있습니다.
예를 들어, 어떤 Klaytn 계정 A가 키 2개짜리 다중 서명 계정이라면 계정 A의 키는 (계정 B의 key, 계정 C의 key)의 2개 키로 구성되고, 각 키의 가중치는 (weight1, weight2)일 수 있습니다. 만약 이 상황에서 계정 B만 자신의 AccountKey로 트랜잭션에 서명했다면 서명에 사용된 AccountKey 가중치의 합은 weight1입니다. 그리고 이 상태에서 계정 C도 트랜잭션에 서명한다면 서명에 사용된 AccountKey 가중치의 합은 weight1 + weight2입니다. 이렇게, 서명에 사용된 모든 AccountKey weight의 합이 기준치(threshold)보다 크거나 같아야 트랜잭션이 전송됩니다. 기준치는 Klaytn 계정을 다중 서명 계정으로 업데이트할 때, 다시 말해 계정 키를 다중 서명 키로 업데이트할 때 입력 파라미터로 설정할 수 있습니다.
Klaytn 계정을 다중 서명 계정으로 업데이트하는 데는 2가지 방법이 있습니다. KAS Console에서 Multi-sig Update를 하거나 API를 호출하여 계정을 업데이트합니다.
KAS Console에서 Multi-sig Update하기
1. KAS Console 사이트에 접속하여 로그인합니다.
2. KAS Console > Service > Wallet > Account Pools 메뉴에서 해당 계정 저장소 KRN을 선택합니다. Account Pool 상세정보로 이동한 것을 확인할 수 있습니다.


3. 다중 서명으로 업데이트할 계정을 선택, Account 상세정보로 이동하여 [Multi-sig Update]를 클릭합니다.
4. Threshold(임계값) 아래 칸에 트랜잭션 서명에 필요한 최소한의 가중치 합
을 숫자로 입력합니다. Key List에는 Pulic Key
와 Weight
숫자값을 입력 후 [추가]를 클릭합니다.

5. 입력한 값이 정확한지 확인 후 우측 하단의 [저장]을 클릭합니다. 이후 Account 상세정보에서 Multi-sig Keys 목록이 업데이트된 걸 확인할 수 있습니다.

Klaytn 계정 생성하기
다중 서명 계정을 만들기 위해서는 Klaytn 계정 생성을 완료한 상태여야 합니다. 또, 다중 서명 계정에 포함될 키를 지닌 계정은 모두 똑같은 계정 저장소에 있어야 합니다. 여기에서는, "0x07DAe1aAb1e1b42A7184E12Ad50CEAc07A890640"라는 EOA를 가진 Klaytn 계정을 키가 2개인 다중 서명 계정으로 업데이트하는 예시를 소개합니다.
Klaytn 계정 A가 키 2개짜리 다중 서명 계정이라면 계정 A의 키는 (계정 B의 key, 계정 C의 key)의 2개 키로 구성될 수 있습니다. 계정 A가 다중 키를 가지려면 해당 키를 가지는 Klaytn 계정(계정 B, 계정 C)가 KAS에 존재해야 합니다.
아래는 생성한 Klaytn 계정 예시입니다.
//계정 A
{
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"chainId": 1001,
"createdAt": 1599187293,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0x4cbbcb974e32a7960e1b356edf60087613101919ed83199f12e872cba068a50f",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x04cdccfb99b2905561e3dd886687b429a004718f11b04914f17ce68fd3a0db46c598a45da85caa61fe84cb78a0f2eaa9983ec7b8805a93ef9428eb1350a8558237",
"updatedAt": 1599187293
}
//계정 B
{
"address": "0x78B123CCCCd50f41E3192a60e6ED92B15E21b1B5",
"chainId": 1001,
"createdAt": 1599187194,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0x6c4419647e7724853f9e50b0c54b5985d0870470ac37b3ef865e62c3ccfa4ea4",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x0463cc38f08dd15dfd416966e9d0da93942e26d2a9a9bcac08d614f487f94a7e46e4418d1acda9e21706f19c917486de40c974eb20c12a2eca2eea91895499d379",
"updatedAt": 1599187194
}
//계정 C
{
"address": "0x7ec5169EA28B2e3fFEF143a3513D7eC1CeFF2cB4",
"chainId": 1001,
"createdAt": 1599187161,
"keyId": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default:0xd3ee56e2616c8d412918e7f0e9222c805aacf5bad6d84b70b83c2229d61f21c9",
"krn": "krn:1001:wallet:68ec0e4b-0f61-4e6f-ae35-be865ab23187:account-pool:default",
"publicKey": "0x043ccf257d2ad3f8c3b2128969302efc6bf59d8cd8e578bcfdac8a4ac9cea6d4747350c98edaec5d23fafa9b3288a3b45816d2e9b3bb28443cc2486ad6bca652f1",
"updatedAt": 1599187161
}
계정 A를 다중 서명 계정으로 업데이트 다중 서명 계정 업데이트 API는 여러분의 계정을 다른 Klaytn 계정들도 함께 서명해야 트랜잭션을 보낼 수 있는 다중 서명 계정으로 업데이트합니다. 여기에서는, "0xa809284C83b901eD106Aba4Ccda14628Af128e14"라는 EOA를 가진 Klaytn 계정(=계정 A)을 키 2개(계정 B, 계정 C의 키), 키별 가중치는 각각 (3, 1), 기준치는 4를 가진 다중 서명 계정으로 업데이트하는 예시를 소개합니다.
API 호출
다중 서명 계정 업데이트 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
curl --location --request PUT "https://wallet-api.klaytnapi.com/v2/account/0xa809284C83b901eD106Aba4Ccda14628Af128e14/multisig" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
"threshold": 4,
"weightedKeys": [
{
"weight": 3,
"publicKey": "0x0463cc38f08dd15dfd416966e9d0da93942e26d2a9a9bcac08d614f487f94a7e46e4418d1acda9e21706f19c917486de40c974eb20c12a2eca2eea91895499d379"
},
{
"weight": 1,
"publicKey": "0x043ccf257d2ad3f8c3b2128969302efc6bf59d8cd8e578bcfdac8a4ac9cea6d4747350c98edaec5d23fafa9b3288a3b45816d2e9b3bb28443cc2486ad6bca652f1"
}
]
}"
API 응답
다중 서명 계정 업데이트 API의 응답은 아래와 같습니다.
{
"code": 0,
"result": {
"address": "0xa809284C83b901eD106Aba4Ccda14628Af128e14",
"krn": "krn:1001:wallet:test:account-pool:rp1",
"multiSigKeys": [
{
"publicKey": "0x0463cc38f08dd15dfd416966e9d0da93942e26d2a9a9bcac08d614f487f94a7e46e4418d1acda9e21706f19c917486de40c974eb20c12a2eca2eea91895499d379",
"weight": 3
},
{
"publicKey": "0x043ccf257d2ad3f8c3b2128969302efc6bf59d8cd8e578bcfdac8a4ac9cea6d4747350c98edaec5d23fafa9b3288a3b45816d2e9b3bb28443cc2486ad6bca652f1",
"weight": 1
}
],
"threshold": 4,
"transactionHash": "0x2b0f6ecd671e4a7075f22c7f46ea43ab8016747e6aae05d8dac4f487a3e640a0",
"updatedAt": 1597297768
}
}
이 API에 관한 자세한 내용은 KAS Reference Documentation의 Multisig 계정 업데이트를 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
계정 업데이트 트랜잭션 생성
기존에 사용하던 계정의 개인 키로 계정 업데이트 트랜잭션을 생성해야 합니다.
반드시 공개키 타입의 대납 계정 업데이트 트랜잭션으로 생성해야 합니다. 공개키 타입이 아닌 다른 계정 업데이트 트랜잭션을 만들면 계정을 사용하지 못할 수 있습니다.
Multisig 계정을 사용하고자 하는 경우에는 마이그레이션 절차를 모두 수행한 후에, Wallet API의 Multisig 계정 업데이트 API를 통해서 변경해 주시길 바랍니다. 마이그레이션 방법은 Klaytn 계정 마이그레이션에서 확인하세요.
API 호출
// Klaytn 계정을 KAS Wallet API로 마이그레이션하기 위해서는 트랜잭션을 생성하고 이를 서명하여 KAS로 전송해야 합니다.
// 트랜잭션에 서명하기 위해 Klaytn 계정으로 Keyring 인스턴스를 생성하고 이를 KeyringContainer에 추가합니다.
// 만약 Klaytn 계정의 키가 `AccountKeyWeigthedMultiSig`이거나 `AccountKeyRoleBased`인 경우
// `keyringContainer.keyring.create` 의 두 번째 파라미터를 배열 혹은 이중 배열로 넘기면 됩니다.
// 더욱 자세한 내용은 https://ko.docs.klaytn.foundation/dapp/sdk/caver-js/api-references/caver.wallet/keyring#caver-wallet-keyring-create 를 참고해 주세요.
const keyringContainer = new caver.keyringContainer();
const keyring = keyringContainer.keyring.create(
"0xc756f6809bc34c2458fcb82fb16d5add3dbad9e3",
"0x{private key}"
);
keyringContainer.add(keyring);
// KAS Wallet API에 키를 생성합니다.
// `caver.kas.wallet.createKeys`를 통해 리턴되는 값의 형태는 아래와 같습니다.
// {
// items: [
// { blob: '0x06000...', keyId: 'krn:1001:...', krn: 'krn:1001:...', publicKey: '0x0400e...', },
// ],
// }
const createdKeys = await caver.kas.wallet.createKeys(1);
const key = createdKeys.items[0];
// FeeDelegatedAccountUpdate 트랜잭션을 생성합니다.
// account 필드에 할당되는 값은 `caver.account.createWithAccountKeyPublic`를 사용하여 생성할 수 있으며
// 마이그레이션 하고자 하는 계정의 주소, 그리고 KAS Wallet API에 생성된 키(public key string 형태)를 파라미터로 전달해야 합니다.
const updateTx = new caver.transaction.feeDelegatedAccountUpdate({
from: keyring.address,
account: caver.account.createWithAccountKeyPublic(
keyring.address,
key.publicKey
),
gas: 1000000,
});
// 트랜잭션에 서명합니다.
await keyringContainer.sign(keyring.address, updateTx);
const result = {
keyId: key.keyId,
address: keyring.address,
rlp: updateTx.getRLPEncoding(),
};
이 API에 관한 자세한 내용은 KAS Reference Documentation의 계정 등록을 확인하십시오. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.
Last updated
Was this helpful?