SDK
이 페이지는 KAS SDK(caver-js-ext-kas/caver-java-ext-kas)를 소개합니다.
KAS SDK(Software Development Kit)는 여러 개발 환경에서 KAS를 쉽게 사용하도록 제공되는 개발 도구입니다. KAS SDK는 Caver의 확장 라이브러리이며 Caver와 마찬가지로 JavaScript와 Java 환경을 지원합니다. KAS SDK로 BApp을 개발하면 하나의 라이브러리를 통해 KAS 기능과 기존 Caver의 기능을 모두 사용할 수 있습니다.
KAS SDK(caver-js extension)KAS SDK(caver-java extension)는 각각 caver-jscaver-java의 확장 라이브러리로 이를 사용해 기존의 caver-js/caver-java 기능을 사용함과 동시에 KAS의 Node API, TokenHistory API, Wallet API, Anchor API, KIP-17 API 그리고 KIP-7 API도 사용하실 수 있습니다.

SDK 설치를 위해 필요한 사항

KAS SDK (caver-js extension)

KAS SDK(caver-js extension)를 사용하려면 아래 패키지들이 필요합니다.
KAS SDK(caver-js extension)는 아래 Node.js 버전에서 동작합니다.

KAS SDK (caver-java extension)

KAS SDK(caver-java extension)를 사용하려면 Java 8 이상이 필요합니다. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

SDK 설치 방법

KAS SDK(caver-js extension) 설치

KAS SDK(caver-js extension)는 아래의 command를 사용하여 설치할 수 있습니다.
1
$ npm install caver-js-ext-kas
Copied!
만약 KAS SDK(caver-js extension)의 특정 버전을 설치하고 싶은 경우 아래의 command를 사용하세요.
1
$ npm install [email protected]
Copied!

KAS SDK(caver-java extension) 설치

maven

Maven project에서 KAS SDK(caver-java extension) 라이브러리를 설치하기 위해서는 아래와 같이 작성하면 설치 할 수 있습니다.
1
<repositories>
2
<repository>
3
<id>jitpack.io</id>
4
<url>https://jitpack.io</url>
5
</repository>
6
</repositories>
7
8
<dependencies>
9
<dependency>
10
<groupId>xyz.groundx.caver</groupId>
11
<artifactId>caver-java-ext-kas</artifactId>
12
<version>X.X.X</version>
13
</dependency>
14
</dependencies>
Copied!
Maven project에서 android용 KAS SDK(caver-java extension) 라이브러리는 아래와 같이 작성하면 설치할 수 있습니다.
1
<repositories>
2
<repository>
3
<id>jitpack.io</id>
4
<url>https://jitpack.io</url>
5
</repository>
6
</repositories>
7
8
<dependencies>
9
<dependency>
10
<groupId>xyz.groundx.caver</groupId>
11
<artifactId>caver-java-ext-kas</artifactId>
12
<version>X.X.X-android</version>
13
</dependency>
14
</dependencies>
Copied!

gradle

1
implementation 'xyz.groundx.caver:caver-java-ext-kas:X.X.X
Copied!
Gradle project에서 android용 KAS SDK(caver-java extension) 라이브러리는 아래와 같이 작성하면 설치할 수 있습니다.
1
implementation 'xyz.groundx.caver:caver-java-ext-kas:X.X.X-android
Copied!
KAS SDK(caver-java extension)의 최신 버전은 Release Page에서 확인할 수 있습니다. 이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

Hello World

KAS SDK(caver-js extension)

KAS SDK(caver-js extension)를 통하여 KAS의 API를 사용하기 위해서는 사용할 "chain id" 와 "인증키"를 세팅해야 합니다. KAS API 서비스를 사용하기 위해서 초기화하는 방법은 아래와 같습니다.
1
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
Copied!
생성자에 chainId, accessKeyId 그리고 secretAccessKey를 전달하면 내부적으로 caver.initKASAPI 함수를 호출하고, 해당 함수에서는 Node API, Wallet API, Token History API, Anchor API, KIP-17 API 그리고 KIP-7 API에서 사용되는 인증키를 한 번에 초기화 합니다. KAS API 서비스 별로 초기화 하는 방법은 아래와 같습니다. 마지막 파라미터로 Endpoint URL을 선택적으로 전달할 수 있으며, 따로 URL이 전달되지 않으면 아래와 같이 KAS Production URL이 기본값으로 세팅됩니다.
KAS Production URL
  • Node API: https://node-api.klaytnapi.com
  • Wallet API: https://wallet-api.klaytnapi.com
  • Anchor API: https://anchor-api.klaytnapi.com
  • Token History API: https://th-api.klaytnapi.com
  • KIP-17 API: https://kip17-api.klaytnapi.com
  • KIP-7 API: https://kip7-api.klaytnapi.com
1
// Node API 초기 세팅
2
caver.initNodeAPI(chainId, accessKeyId, secretAccessKey [, useHttp] [, url])
3
4
// Wallet API 초기 세팅
5
caver.initWalletAPI(chainId, accessKeyId, secretAccessKey [, url])
6
7
// TokenHistory API 초기 세팅
8
caver.initTokenHistoryAPI(chainId, accessKeyId, secretAccessKey [, url])
9
10
// Anchor API 초기 세팅
11
caver.initAnchorAPI(chainId, accessKeyId, secretAccessKey [, url])
12
13
// KIP-17 API 초기 세팅
14
caver.initKIP17API(chainId, accessKeyId, secretAccessKey [, url])
15
16
// KIP-7 API 초기 세팅
17
caver.initKIP7API(chainId, accessKeyId, secretAccessKey [, url])
Copied!
다음은 KAS SDK(caver-js extension)를 사용할 때 KAS의 Node API를 활용해 최신 블록 정보를 불러오는 방법입니다.
caver.initNodeAPI 함수에서는 useHttp 파라미터를 통해 KAS Node API를 호출할 때 사용할 provider를 지정할 수 있습니다. 자세한 내용은 WebSocket Provider를 사용하여 KAS Node API 호출하기를 참고하시기 바랍니다.
1
const CaverExtKAS = require('caver-js-ext-kas')
2
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
3
4
const blockNumber = await caver.rpc.klay.getBlockNumber()
5
console.log(blockNumber)
Copied!
위의 코드를 실행하면 아래와 같이 최신 블록 넘버가 출력됩니다.
1
0x26b0736
Copied!
다음은 KAS SDK(caver-js extension)를 사용하여 KAS의 Wallet API를 사용하여 계정을 생성하는 방법입니다.
1
const CaverExtKAS = require('caver-js-ext-kas')
2
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
3
4
const account = await caver.kas.wallet.createAccount()
5
console.log(account)
Copied!
위의 코드를 실행하면 아래와 같이 KAS에 생성된 계정의 정보가 출력됩니다.
1
Account {
2
address: '0x4d6de1Fe6a281306C54AD81b79a0c137b13872DC',
3
chainId: 1001,
4
createdAt: 1602124416,
5
keyId: 'krn:1001:wallet:9c42dff5-d317-4abd-a7ab-576aad12ea07:account-pool:default:0x975fa77efbde347b0c471f0f29ba73c1281521f69485d650c8c10125e37b57fc',
6
krn: 'krn:1001:wallet:9c42dff5-d317-4abd-a7ab-576aad12ea07:account-pool:default',
7
publicKey: '0x0433f1b15d33e821155988408e949d21d5bd0d053d9f2ed90f3df57e96f0ce7a766ba36617f43f2ad1e0f3caca5bdb431a88c51c1bdaab8dc781589b1658e646f1',
8
updatedAt: 1602124416
9
}
Copied!
다음은 KAS SDK(caver-js extension)를 사용하여 KAS의 TokenHistory API를 사용하여 NFT 컨트랙트 리스트를 조회하는 방법입니다.
1
const CaverExtKAS = require('caver-js-ext-kas')
2
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
3
4
// 쿼리 파라미터는 optional 파라미터이므로, 쿼리 파라미터 없이 실행할 수 있습니다.
5
const query = { size: 1 }
6
const nftContractList = await caver.kas.tokenHistory.getNFTContractList(query)
7
console.log(nftContractList)
Copied!
위의 코드를 실행하면 아래와 같이 NFT 컨트랙트 리스트가 출력됩니다.
1
PageableNftContractDetails {
2
items: [
3
NftContractDetail {
4
address: '0x44b12eea91acb7866737e5157f1525503a3c7d11',
5
name: 'YouTube Thumbnail Token',
6
symbol: 'YTT',
7
totalSupply: '0x3',
8
createdAt: 1601417429,
9
updatedAt: 1601417429,
10
deletedAt: 0,
11
type: 'KIP-17',
12
status: 'completed'
13
}
14
],
15
cursor: 'omYpAQ8xGDrlz5O3akAbYDPolJ1r7kx3ZWg2L5mwDQ5GAk7ONYdpzXW0LBZVq2n60WRJKPg8469bvxMl1rmoaew3EQVa6Gq8KpeEdzB0O9vMX4NE1X9eb206gBNLJ7qW'
16
}
Copied!
다음은 KAS SDK(caver-js extension)를 사용하여 KAS의 Anchor API를 사용하여 앵커링 데이터를 전송하는 방법입니다.
1
const CaverExtKAS = require('caver-js-ext-kas')
2
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
3
4
const operator = '0x{address in hex}'
5
const payload = { id: '12837851', customField: 'custom test' }
6
const anchoringResult = await caver.kas.anchor.sendAnchoringData(operator, payload)
7
console.log(anchoringResult)
Copied!
위의 코드를 실행하면 아래와 같이 앵커링 데이터를 전송한 결과가 출력됩니다.
1
AnchorBlockStatus { status: 'succeed' }
Copied!
다음은 KAS SDK(caver-js extension)를 사용할 때 KAS의 KIP-17 API를 활용한 KIP-17 컨트랙트 배포 방법입니다.
1
const CaverExtKAS = require('caver-js-ext-kas')
2
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
3
4
const name = 'Jasmine'
5
const symbol = 'JAS'
6
const alias = 'jasmine-alias'
7
const result = await caver.kas.kip17.deploy(name, symbol, alias)
8
console.log(result)
Copied!
위의 코드를 실행하면 아래와 같이 KIP-17 컨트랙트 배포 API를 호출한 결과가 출력됩니다.
1
{
2
status: 'Submitted',
3
transactionHash: '0x4707420eeda479477eae0c73878d9186150c153a9e2cbfe43e9d37750b64a4ec',
4
}
Copied!
다음은 KAS SDK(caver-js extension)를 사용할 때 KAS의 KIP-7 API를 활용한 KIP-7 컨트랙트 배포 방법입니다.
1
const CaverExtKAS = require('caver-js-ext-kas')
2
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
3
4
const name = 'Jasmine'
5
const symbol = 'JAS'
6
const decimals = 18
7
const initialSupply = '1000000000000000000'
8
const alias = 'jasmine-alias'
9
const result = await caver.kas.kip7.deploy(name, symbol, decimals, initialSupply, alias)
10
console.log(result)
Copied!
위의 코드를 실행하면 아래와 같이 KIP-7 컨트랙트 배포 API를 호출한 결과가 출력됩니다.
1
{
2
status: 'Submitted',
3
transactionHash: '0xf4a9c11fb3e5148050ac2a19ab221be72bebfea95078317dda01a1c207f6f779',
4
}
Copied!

KAS SDK(caver-java extension)

KAS SDK(caver-java extension)를 통하여 KAS의 API를 사용하기 위해서는 사용할 "chain id" 와 "인증키"를 세팅해야 합니다. KAS API 서비스를 사용하기 위해서 초기화하는 방법은 아래와 같습니다.
1
CaverExtKAS caver = new CaverExtKAS();
2
caver.initKASAPI(chainId, accessKeyId, secretAccessKey)
Copied!
위의 caver.initKASAPI 함수를 사용하면 Node API, Wallet API, Token History API, Anchor API, 그리고 KIP-17 API에서 사용되는 인증키를 한 번에 초기화 합니다. KAS API 서비스 별로 초기화 하는 방법은 아래와 같습니다. 마지막 파라미터로 Endpoint URL을 선택적으로 전달할 수 있으며, 따로 URL이 전달되지 않으면 아래와 같이 KAS Production URL이 기본값으로 세팅됩니다.
KAS Production URL
  • Node API: https://node-api.klaytnapi.com
  • Wallet API: https://wallet-api.klaytnapi.com
  • Anchor API: https://anchor-api.klaytnapi.com
  • Token History API: https://th-api.klaytnapi.com
  • KIP-17 API: https://kip17-api.klaytnapi.com
  • KIP-7 API: https://kip7-api.klaytnapi.com
1
// Node API 초기 세팅
2
caver.initNodeAPI(chainId, accessKeyId, secretAccessKey [, url])
3
4
// Wallet API 초기 세팅
5
caver.initWalletAPI(chainId, accessKeyId, secretAccessKey [, url])
6
7
// TokenHistory API 초기 세팅
8
caver.initTokenHistoryAPI(chainId, accessKeyId, secretAccessKey [, url])
9
10
// Anchor API 초기 세팅
11
caver.initAnchorAPI(chainId, accessKeyId, secretAccessKey [, url])
12
13
// KIP-17 API 초기 세팅
14
caver.initKIP17API(chainId, accessKeyId, secretAccessKey [, url])
Copied!
다음은 KAS SDK(caver-java extension)를 사용할 때 KAS의 Node API를 활용해 최신 블록 정보를 불러오는 방법입니다.
1
import com.klaytn.caver.methods.response.Quantity;
2
import xyz.groundx.caver_ext_kas.CaverExtKAS;
3
4
import java.io.IOException;
5
6
public class HelloKAS {
7
public static void getBlockNumber() throws IOException {
8
CaverExtKAS caver = new CaverExtKAS();
9
caver.initKASAPI(chainId, accessKeyId, secretAccessKey);
10
11
Quantity response = caver.rpc.klay.getBlockNumber().send();
12
System.out.println(response.getResult());
13
}
14
15
public static void main(String[] args) throws IOException {
16
getBlockNumber();
17
}
18
}
Copied!
위의 코드를 실행하면 아래와 같이 최신 블록 넘버가 출력됩니다.
1
0x26b0736
Copied!
다음은 KAS SDK(caver-java extension)를 사용하여 KAS의 Wallet API를 사용하여 계정을 생성하는 방법입니다.
1
import xyz.groundx.caver_ext_kas.CaverExtKAS;
2
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.ApiException;
3
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.api.wallet.model.Account;
4
5
public class HelloKAS {
6
public static void createAccount() throws ApiException {
7
CaverExtKAS caver = new CaverExtKAS();
8
caver.initKASAPI(chainId, accessKeyId, secretAccessKey);
9
10
Account account = caver.kas.wallet.createAccount();
11
System.out.println(account);
12
}
13
14
public static void main(String[] args) throws ApiException {
15
createAccount();
16
}
17
}
Copied!
위의 코드를 실행하면 아래와 같이 KAS에 생성된 계정의 정보가 출력됩니다.
1
class Account {
2
address: 0x0BA67C887F922AF3d0D781dD940c6d0C80D395DE
3
chainId: 1001
4
createdAt: 1602550121
5
keyId: krn:1001:wallet:d5c346f5-bb80-4f45-9093-57e25205cdc8:account-pool:pool:0xbedefad10db4df3488aaf1669b9164549c1aebe7c326f4b19ba6c6ce0f330fa5
6
krn: krn:1001:wallet:d5c346f5-bb80-4f45-9093-57e25205cdc8:account-pool:pool
7
publicKey: 0x041d56cbe46915854600c9d3c4ef614906f27473abe948cf587d990dcbce030d5989f4458bc470e44b2916d75194729102bb60e1e6a27c01030de84208a13232c2
8
updatedAt: 1602550121
9
multiSigKeys: null
10
threshold: null
11
}
Copied!
다음은 KAS SDK(caver-java extension)를 사용하여 KAS의 TokenHistory API를 사용하여 NFT 컨트랙트 리스트를 조회하는 방법입니다.
1
import xyz.groundx.caver_ext_kas.CaverExtKAS;
2
import xyz.groundx.caver_ext_kas.kas.tokenhistory.TokenHistoryQueryOptions;
3
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.ApiException;
4
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.api.tokenhistory.model.PageableNftContractDetails;
5
6
public class HelloKAS {
7
8
public static void getNFTContractList() throws ApiException {
9
CaverExtKAS caver = new CaverExtKAS();
10
caver.initKASAPI(chainId, accessKeyId, secretAccessKey);
11
12
// 쿼리 파라미터는 optional 파라미터이므로, 쿼리 파라미터 없이 실행할 수 있습니다.
13
TokenHistoryQueryOptions options = new TokenHistoryQueryOptions();
14
options.setSize((long)1);
15
16
PageableNftContractDetails result = caver.kas.tokenHistory.getNFTContractList(options);
17
System.out.println(result);
18
}
19
20
public static void main(String[] args) throws ApiException {
21
getNFTContractList();
22
}
23
}
Copied!
위의 코드를 실행하면 아래와 같이 NFT 컨트랙트 리스트가 출력됩니다.
1
class PageableNftContractDetails {
2
items: [class NftContractDetail {
3
address: 0x1d15887950aa821814b793ed4a4cfa38937df5da
4
name: KIP17
5
symbol: KIP17
6
totalSupply: 0x0
7
createdAt: 1602495497
8
updatedAt: 1602495497
9
deletedAt: 0
10
type: KIP-17
11
status: completed
12
}]
13
cursor: owN0deEJPGMZ69Q3L5V34MAgJ5xpNmrQ9lWk0EDvxv7bkQq1aLX58AZz0GlgNEyd1kRwK94JBdVP6rm3eopO2DMWYz6BKoXPYbdOewaGqZ1728La7rbx8YDBgW2lkqAK
14
}
Copied!
다음은 KAS SDK(caver-java extension)를 사용하여 KAS의 Anchor API를 사용하여 앵커링 데이터를 전송하는 방법입니다.
1
import xyz.groundx.caver_ext_kas.CaverExtKAS;
2
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.ApiException;
3
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.api.anchor.model.AnchorBlockPayload;
4
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.api.anchor.model.AnchorBlockStatus;
5
6
public class HelloKAS {
7
public static void sendAnchoringData() throws ApiException {
8
CaverExtKAS caver = new CaverExtKAS();
9
caver.initKASAPI(chainId, accessKeyId, secretAccessKey);
10
11
String operatorID = "operatorId";
12
13
AnchorBlockPayload payload = new AnchorBlockPayload();
14
payload.put("id", "12837851");
15
payload.put("field", "1");
16
payload.put("filed2", 4);
17
18
AnchorBlockStatus status = caver.kas.anchor.sendAnchoringData(operatorID, payload);
19
System.out.println();
20
}
21
22
public static void main(String[] args) throws ApiException{
23
sendAnchoringData();
24
}
25
}
Copied!
위의 코드를 실행하면 아래와 같이 앵커링 데이터를 전송한 결과가 출력됩니다.
1
class AnchorBlockStatus {
2
status: succeed
3
}
Copied!
다음은 KAS SDK(caver-java extension)를 사용할 때 KAS의 KIP-17 API를 활용한 KIP-17 컨트랙트 배포 방법입니다.
1
import xyz.groundx.caver_ext_kas.CaverExtKAS;
2
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.ApiException;
3
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.api.kip17.model.Kip17TransactionStatusResponse;
4
5
public class HelloKAS {
6
public static void deployKip17() throws ApiException {
7
CaverExtKAS caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey);
8
9
String operatorID = "operatorId";
10
11
String name = "My First KIP-17";
12
String symbol = "MFK";
13
String alias = "my-first-kip17";
14
Kip17TransactionStatusResponse res = caver.kas.kip17.deploy(name, symbol, alias);
15
System.out.println(res);
16
}
17
18
public static void main(String[] args) throws ApiException {
19
deployKip17();
20
}
21
}
Copied!
위의 코드를 실행하면 아래와 같이 KIP-17 컨트랙트 배포 API를 호출한 결과가 출력됩니다.
1
class Kip17TransactionStatusResponse {
2
status: Submitted
3
transactionHash: 0x....
4
}
Copied!
다음은 KAS SDK(caver-java extension)를 사용할 때 KAS의 KIP-7 API를 활용한 KIP-7 컨트랙트 배포 방법입니다.
1
import xyz.groundx.caver_ext_kas.CaverExtKAS;
2
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.ApiException;
3
import xyz.groundx.caver_ext_kas.rest_client.io.swagger.client.api.kip7.model.Kip7TransactionStatusResponse;
4
5
public class HelloKAS {
6
public static void deployKip7() throws ApiException {
7
CaverExtKAS caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey);
8
9
String alias = "my-first-kip7";
10
String name = "My First KIP-7";
11
String symbol = "MFK7";
12
int decimals = 18;
13
BigInteger initial_supply = BigInteger.valueOf(100_000).multiply(BigInteger.TEN.pow(18)); // 100000 * 10^18
14
15
Kip7TransactionStatusResponse res = caver.kas.kip7.deploy(name, symbol, decimals, initial_supply, testAlias);
16
System.out.println(res);
17
}
18
19
public static void main(String[] args) throws ApiException {
20
deployKip7();
21
}
22
}
Copied!
위의 코드를 실행하면 아래와 같이 KIP-7 컨트랙트 배포 API를 호출한 결과가 출력됩니다.
1
class Kip7TransactionStatusResponse {
2
status: Submitted
3
transactionHash: 0x....
4
}
Copied!

KAS Wallet API의 클레이튼 계정으로 스마트 컨트랙트 사용하기

KAS SDK v1.0.2부터는 caver.wallet에서 KAS의 Wallet API를 사용하여 동작하는 지갑인 KASWallet이 제공됩니다. 이를 통하여 KAS Wallet API의 클레이튼 계정을 사용하여 caver.contract 패키지와 caver.kct를 사용할 수 있습니다.

KAS Wallet API의 클레이튼 계정으로 caver.contract 사용하기

caver.contractcaver.wallet을 사용하여 Klaytn에 컨트랙트를 배포하거나 기배포된 컨트랙트를 실행하는 기능을 제공합니다. KAS SDK의 caver.wallet은 KAS Wallet API를 사용하는 지갑이기 때문에 KAS SDK의 caver.contract를 사용하면 KAS Wallet API의 클레이튼 계정을 사용하여 손쉽게 Klaytn에 컨트랙트를 배포하거나 실행할 수 있습니다.
KAS Wallet API의 클레이튼 계정을 사용하여 caver.contract를 사용하는 방법은 기존의 caver.contract를 사용하는 방법과 동일합니다. 여기서는 간단하게 배포하고 실행하는 방법을 설명합니다. 여기서 스마트 컨트랙트를 배포하고 실행할 때 사용되는 클레이튼 계정은 KAS Wallet API에서 관리되고 있는 클레이튼 계정이며, 이 계정은 트랜잭션을 전송하기 위한 충분한 KLAY를 소유하고 있어야 합니다.

KAS SDK(caver-js extension)

caver-js-ext-kas를 사용하여 스마트 컨트랙트를 배포하는 방법은 아래와 같습니다.
1
// caver-js-ext-kas
2
const CaverExtKAS = require('caver-js-ext-kas')
3
4
const chainId = 1001
5
const accessKeyId = '{access key ID of your KAS account}'
6
const secretAccessKey = '{secret access key of your KAS account}'
7
8
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
9
10
const abi = [
11
{
12
constant: true,
13
inputs: [{ name: 'key', type: 'string' }],
14
name: 'get',
15
outputs: [{ name: '', type: 'string' }],
16
payable: false,
17
stateMutability: 'view',
18
type: 'function',
19
},
20
{
21
constant: false,
22
inputs: [{ name: 'key', type: 'string' }, { name: 'value', type: 'string' }],
23
name: 'set',
24
outputs: [],
25
payable: false,
26
stateMutability: 'nonpayable',
27
type: 'function',
28
},
29
]
30
const byteCode =
31
'0x608060405234801561001057600080fd5b5061051f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063693ec85e1461003b578063e942b5161461016f575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506102c1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610134578082015181840152602081019050610119565b50505050905090810190601f1680156101615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf6004803603604081101561018557600080fd5b81019080803590602001906401000000008111156101a257600080fd5b8201836020820111156101b457600080fd5b803590602001918460018302840111640100000000831117156101d657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561023957600080fd5b82018360208201111561024b57600080fd5b8035906020019184600183028401116401000000008311171561026d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506103cc565b005b60606000826040518082805190602001908083835b602083106102f957805182526020820191506020810190506020830392506102d6565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103c05780601f10610395576101008083540402835291602001916103c0565b820191906000526020600020905b8154815290600101906020018083116103a357829003601f168201915b50505050509050919050565b806000836040518082805190602001908083835b6020831061040357805182526020820191506020810190506020830392506103e0565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061044992919061044e565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061048f57805160ff19168380011785556104bd565b828001600101855582156104bd579182015b828111156104bc5782518255916020019190600101906104a1565b5b5090506104ca91906104ce565b5090565b6104f091905b808211156104ec5760008160009055506001016104d4565b5090565b9056fea165627a7a723058203ffebc792829e0434ecc495da1b53d24399cd7fff506a4fd03589861843e14990029'
32
const contract = new caver.contract(abi)
33
34
// SmartContractDeploy 트랜잭션을 발생시키는 from 계정은 충분한 KLAY를 소유하고 있어야 합니다.
35
const deployed = await contract.deploy({ data: byteCode }).send({ from: '0x{the address of a Klaytn account in KAS Wallet API}', gas: 10000000 })
36
console.log(`Deployed contract address: ${deployed.options.address}`)
Copied!
위의 코드를 실행하면 아래와 같이 배포된 스마트 컨트랙트의 주소가 출력됩니다.
1
Deployed contract address: 0x5D3Cd9eB73f00BbECB949DCE08BB26019FcB599f
Copied!
caver-js-ext-kas를 사용하여 Klaytn에 배포된 스마트 컨트랙트를 실행하는 방법은 아래와 같습니다.
1
// caver-js-ext-kas
2
const CaverExtKAS = require('caver-js-ext-kas')
3
4
const chainId = 1001
5
const accessKeyId = '{access key ID of your KAS account}'
6
const secretAccessKey = '{secret access key of your KAS account}'
7
8
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
9
10
const abi = [
11
{
12
constant: true,
13
inputs: [{ name: 'key', type: 'string' }],
14
name: 'get',
15
outputs: [{ name: '', type: 'string' }],
16
payable: false,
17
stateMutability: 'view',
18
type: 'function',
19
},
20
{
21
constant: false,
22
inputs: [{ name: 'key', type: 'string' }, { name: 'value', type: 'string' }],
23
name: 'set',
24
outputs: [],
25
payable: false,
26
stateMutability: 'nonpayable',
27
type: 'function',
28
},
29
]
30
const contractAddress = '0x5D3Cd9eB73f00BbECB949DCE08BB26019FcB599f'
31
const contract = new caver.contract(abi, contractAddress)
32
33
// SmartContractExecution 트랜잭션을 발생시키는 from 계정은 충분한 KLAY를 소유하고 있어야 합니다.
34
const receipt = await contract.methods.set('key', 'value').send({ from: '0x{the address of a Klaytn account in KAS Wallet API}', gas: 5000000 })
35
console.log(receipt)
Copied!
위의 코드를 실행하면 아래와 같이 SmartContractExecution 트랜잭션의 실행 결과가 출력됩니다.
1
{
2
blockHash: '0x86ba9ee3428d575438dc7dd0a83d151e400b853a948365d1aef0f73794d0e194',
3
blockNumber: 45759390,
4
contractAddress: null,
5
from: '0x2f87b35ce367eefaa78a5d922dab39113e0bd5a9',
6
gas: '0x2faf080',
7
gasPrice: '0x5d21dba00',
8
gasUsed: 62351,
9
input: '0xe942b...',
10
logsBloom: '0x00000...',
11
nonce: '0x1',
12
senderTxHash: '0x4eb995c841a81153f7cfec45b316b2b59c64d28e1af0be8b157d0e3f87647744',
13
signatures: [
14
{
15
V: '0x7f6',
16
R: '0x2bc966ba636c8b6358783f852ad64f372a97f8513b38e5a2dc84524850c3a6d7',
17
S: '0x147e4d0a93c5052dee2d8ce5c783d10396c8f5da438b659898d0eb47c832d648',
18
},
19
],
20
status: true,
21
to: '0x5d3cd9eb73f00bbecb949dce08bb26019fcb599f',
22
transactionHash: '0x4eb995c841a81153f7cfec45b316b2b59c64d28e1af0be8b157d0e3f87647744',
23
transactionIndex: 0,
24
type: 'TxTypeSmartContractExecution',
25
typeInt: 48,
26
value: '0x0',
27
events: {},
28
}
Copied!

KAS SDK(caver-java extension)

caver-java-ext-kas를 사용하여 스마트 컨트랙트를 배포하는 방법은 아래와 같습니다.
1
// caver-java-ext-kas
2
import com.klaytn.caver.contract.Contract;
3
import com.klaytn.caver.contract.SendOptions;
4
import com.klaytn.caver.utils.ChainId;
5
import org.web3j.protocol.exceptions.TransactionException;
6
import xyz.groundx.caver_ext_kas.CaverExtKAS;
7
8
import java.io.IOException;
9
import java.lang.reflect.InvocationTargetException;
10
import java.math.BigInteger;
11
12
public class SampleContract {
13
static final String BINARY = "608060405234801561001057600080fd5b5061051f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063693ec85e1461003b578063e942b5161461016f575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506102c1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610134578082015181840152602081019050610119565b50505050905090810190601f1680156101615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf6004803603604081101561018557600080fd5b81019080803590602001906401000000008111156101a257600080fd5b8201836020820111156101b457600080fd5b803590602001918460018302840111640100000000831117156101d657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561023957600080fd5b82018360208201111561024b57600080fd5b8035906020019184600183028401116401000000008311171561026d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506103cc565b005b60606000826040518082805190602001908083835b602083106102f957805182526020820191506020810190506020830392506102d6565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103c05780601f10610395576101008083540402835291602001916103c0565b820191906000526020600020905b8154815290600101906020018083116103a357829003601f168201915b50505050509050919050565b806000836040518082805190602001908083835b6020831061040357805182526020820191506020810190506020830392506103e0565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061044992919061044e565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061048f57805160ff19168380011785556104bd565b828001600101855582156104bd579182015b828111156104bc5782518255916020019190600101906104a1565b5b5090506104ca91906104ce565b5090565b6104f091905b808211156104ec5760008160009055506001016104d4565b5090565b9056fea165627a7a723058203ffebc792829e0434ecc495da1b53d24399cd7fff506a4fd03589861843e14990029";
14
15
static final String ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
16
17
public static void main(String[] args) throws NoSuchMethodException, TransactionException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException {
18
String accessKey = "your access key";
19
String secretAccessKey = "your secret access key";
20
CaverExtKAS caver = new CaverExtKAS(ChainId.BAOBAB_TESTNET, accessKey, secretAccessKey);
21
22
String deployer = "0x{address}";
23
BigInteger gas = BigInteger.valueOf(10000000);
24
SendOptions sendOptions = new SendOptions(deployer, gas);
25
26
Contract contract = new Contract(caver, ABI);
27
Contract sampleContract = contract.deploy(sendOptions, BINARY);
28
29
System.out.println("Deployed contract address: " + sampleContract.getContractAddress());
30
}
31
}
Copied!
위의 코드를 실행하면 아래와 같이 배포된 스마트컨트랙트의 주소가 출력됩니다.
1
Deployed contract address: 0x5D3Cd9eB73f00BbECB949DCE08BB26019FcB599f
Copied!
caver-java-ext-kas를 사용하여 Klaytn에 배포된 스마트 컨트랙트를 실행하는 방법은 아래와 같습니다.
1
// caver-java-ext-kas
2
import com.klaytn.caver.contract.Contract;
3
import com.klaytn.caver.contract.SendOptions;
4
import com.klaytn.caver.methods.response.TransactionReceipt;
5
import com.klaytn.caver.utils.ChainId;
6
import org.web3j.abi.datatypes.Type;
7
import org.web3j.protocol.exceptions.TransactionException;
8
import xyz.groundx.caver_ext_kas.CaverExtKAS;
9
10
import java.io.IOException;
11
import java.lang.reflect.InvocationTargetException;
12
import java.math.BigInteger;
13
14
public class SampleContract {
15
static final String ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
16
17
public static void main(String[] args) throws NoSuchMethodException, TransactionException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException {
18
String accessKey = "your access key";
19
String secretAccessKey = "your secret access key";
20
CaverExtKAS caver = new CaverExtKAS(ChainId.BAOBAB_TESTNET, accessKey, secretAccessKey);
21
22
String contractAddress = "0x5D3Cd9eB73f00BbECB949DCE08BB26019FcB599f";
23
String executor = "0x{address}";
24
Contract sampleContract = new Contract(caver, ABI, contractAddress);
25
26
SendOptions sendOptions = new SendOptions(executor, BigInteger.valueOf(5000000));
27
TransactionReceipt.TransactionReceiptData receiptData = sampleContract.send(sendOptions, "set", "key", "value");
28
29
System.out.println(receiptData.getTransactionHash());
30
}
31
}
Copied!
위의 코드를 실행하면 아래와 같이 SmartContractExecution 트랜잭션의 Hash값이 출력됩니다.
1
0x4eb995c841a81153f7cfec45b316b2b59c64d28e1af0be8b157d0e3f87647744
Copied!
Caver의 caver.contract에 관한 자세한 내용은 caver-js 혹은 caver-java을 확인하십시오.

KAS Wallet API의 클레이튼 계정으로 caver.kct.kip7 사용하기

caver.kct.kip7caver.wallet을 사용하여 Klaytn에 KIP-7 토큰 컨트랙트를 배포하거나 기배포된 KIP-7 토큰 컨트랙트를 실행하는 기능을 제공합니다. KAS SDK의 caver.wallet은 KAS Wallet API를 사용하는 지갑이기 때문에 KAS SDK의 caver.kct.kip7를 사용하면 KAS Wallet API의 클레이튼 계정을 사용하여 손쉽게 Klaytn에 KIP-7 토큰 컨트랙트를 배포하거나 실행할 수 있습니다.
KAS Wallet API의 클레이튼 계정을 사용하여 caver.kct.kip7를 사용하는 방법은 기존의 caver.kct.kip7를 사용하는 방법과 동일합니다. 여기서는 간단하게 KIP-7 토큰 컨트랙트를 배포하고 실행하는 방법을 설명합니다. 여기서 토큰 컨트랙트를 배포하고 실행할 때 사용되는 계정은 KAS Wallet API에서 관리되고 있는 클레이튼 계정이며, 이 계정은 트랜잭션을 전송하기 위한 충분한 KLAY를 소유하고 있어야 합니다.

KAS SDK(caver-js extension)

caver-js-ext-kas를 사용하여 KIP-7 토큰 컨트랙트를 배포하는 방법은 아래와 같습니다.
1
// caver-js-ext-kas
2
const CaverExtKAS = require('caver-js-ext-kas')
3
4
const chainId = 1001
5
const accessKeyId = '{access key ID of your KAS account}'
6
const secretAccessKey = '{secret access key of your KAS account}'
7
8
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
9
10
const deployed = await caver.kct.kip7.deploy({
11
name: 'Jasmine',
12
symbol: 'JAS',
13
decimals: 18,
14
initialSupply: '100000000000000000000'
15
}, '0x{the address of a Klaytn account in KAS Wallet API}')
16
console.log(`Deployed contract address: ${deployed.options.address}`)
Copied!
위의 코드를 실행하면 아래와 같이 배포된 KIP-7 토큰 컨트랙트의 주소가 출력됩니다.
1
Deployed contract address: 0x42c3809EeED7c5C497067fE4092D1c354D3a01Cb
Copied!
caver-js-ext-kas를 사용하여 Klaytn에 배포된 KIP-7 토큰 컨트랙트를 실행하는 방법은 아래와 같습니다.
1
// caver-js-ext-kas
2
const CaverExtKAS = require('caver-js-ext-kas')
3
4
const chainId = 1001
5
const accessKeyId = '{access key ID of your KAS account}'
6
const secretAccessKey = '{secret access key of your KAS account}'
7
8
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
9
10
const contractAddress = '0x42c3809EeED7c5C497067fE4092D1c354D3a01Cb'
11
const kip7 = new caver.kct.kip7(contractAddress)
12
13
const receipt = await kip7.transfer('0x{address in hex}', 1, { from: '0x{the address of a Klaytn account in KAS Wallet API}' })
14
console.log(receipt)
Copied!
위의 코드를 실행하면 아래와 같이 SmartContractExecution 트랜잭션의 실행 결과가 출력됩니다.
1
{
2
blockHash: '0x00335de146548227d0800087685380efcfd206f7fe1e905874ad4b6bb8e0a3f7',
3
blockNumber: 45760341,
4
contractAddress: null,
5
from: '0x2f87b35ce367eefaa78a5d922dab39113e0bd5a9',
6
gas: '0xd637',
7
gasPrice: '0x5d21dba00',
8
gasUsed: 41487,
9
input: '0xa9059...',
10
logsBloom: '0x00000...',
11
nonce: '0x5',
12
senderTxHash: '0x752d6ac8cf7ba0e12de8c0200fda68925f588a0b614118e19568eec4ad3fe4dd',
13
signatures: [
14
{
15
V: '0x7f5',
16
R: '0xf9d37f109b6e17099d7808ded81fe9e69086a710e027d0c64330c3b434022ea4',
17
S: '0x20cb7a6afdeeaf35bb83ed9d0ca9caca17746ed475af44fe342c271ac638e1b1',
18
},
19
],
20
status: true,
21
to: '0x42c3809eeed7c5c497067fe4092d1c354d3a01cb',
22
transactionHash: '0x752d6ac8cf7ba0e12de8c0200fda68925f588a0b614118e19568eec4ad3fe4dd',
23
transactionIndex: 0,
24
type: 'TxTypeSmartContractExecution',
25
typeInt: 48,
26
value: '0x0',
27
events: {
28
Transfer: {
29
address: '0x42c3809EeED7c5C497067fE4092D1c354D3a01Cb',
30
blockNumber: 45760341,
31
transactionHash: '0x752d6ac8cf7ba0e12de8c0200fda68925f588a0b614118e19568eec4ad3fe4dd',
32
transactionIndex: 0,
33
blockHash: '0x00335de146548227d0800087685380efcfd206f7fe1e905874ad4b6bb8e0a3f7',
34
logIndex: 0,
35
id: 'log_29039dd9',
36
returnValues: {
37
'0': '0x2F87b35Ce367EEfaA78a5d922DaB39113E0bd5a9',
38
'1': '0x2F87b35Ce367EEfaA78a5d922DaB39113E0bd5a9',
39
'2': '1',
40
from: '0x2F87b35Ce367EEfaA78a5d922DaB39113E0bd5a9',
41
to: '0x2F87b35Ce367EEfaA78a5d922DaB39113E0bd5a9',
42
value: '1',
43
},
44
event: 'Transfer',
45
signature: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
46
raw: {
47
data: '0x0000000000000000000000000000000000000000000000000000000000000001',
48
topics: [
49
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
50
'0x0000000000000000000000002f87b35ce367eefaa78a5d922dab39113e0bd5a9',
51
'0x0000000000000000000000002f87b35ce367eefaa78a5d922dab39113e0bd5a9',
52
],
53
},
54
},
55
},
56
}
Copied!

KAS SDK(caver-java extension)

caver-java-ext-kas를 사용하여 KIP-7 토큰 컨트랙트를 배포하는 방법은 아래와 같습니다.
1
// caver-java-ext-kas
2
import com.klaytn.caver.kct.kip7.KIP7;
3
import com.klaytn.caver.utils.ChainId;
4
import org.web3j.protocol.exceptions.TransactionException;
5
import xyz.groundx.caver_ext_kas.CaverExtKAS;
6
7
import java.io.IOException;
8
import java.lang.reflect.InvocationTargetException;
9
import java.math.BigInteger;
10
11
public class SampleKIP7 {
12
public static void main(String[] args) throws NoSuchMethodException, IOException, InstantiationException, ClassNotFoundException, IllegalAccessException, InvocationTargetException, TransactionException {
13
String accessKey = "your access key";
14
String secretAccessKey = "your secret access key";
15
CaverExtKAS caver = new CaverExtKAS(ChainId.BAOBAB_TESTNET, accessKey, secretAccessKey);
16
17
//deployer must have KLAY to deploy and execute smart contract.
18
String deployer = "0x{address}";
19
20
BigInteger initialSupply = BigInteger.TEN.multiply(BigInteger.TEN.pow(18)); // 10 * 10^18
21
KIP7 kip7 = KIP7.deploy(caver, deployer, "JASMINE", "JAS", 18, initialSupply);
22
System.out.println("Deployed contract address : " + kip7.getContractAddress());
23
}
Copied!
위의 코드를 실행하면 아래와 같이 배포된 KIP-7 토큰 컨트랙트의 주소가 출력됩니다.
1
Deployed contract address: 0x42c3809EeED7c5C497067fE4092D1c354D3a01Cb
Copied!
caver-java-ext-kas를 사용하여 Klaytn에 배포된 KIP-7 토큰 컨트랙트를 실행하는 방법은 아래와 같습니다.
1
// caver-java-ext-kas
2
import com.klaytn.caver.contract.SendOptions;
3
import com.klaytn.caver.kct.kip7.KIP7;
4
import com.klaytn.caver.methods.response.TransactionReceipt;
5
import com.klaytn.caver.utils.ChainId;
6
import org.web3j.protocol.exceptions.TransactionException;
7
import xyz.groundx.caver_ext_kas.CaverExtKAS;
8
9
import java.io.IOException;
10
import java.lang.reflect.InvocationTargetException;
11
import java.math.BigInteger;
12
13
public class SampleKIP7 {
14
15
public static void main(String[] args) throws NoSuchMethodException, IOException, InstantiationException, ClassNotFoundException, IllegalAccessException, InvocationTargetException, TransactionException {
16
String accessKey = "your access key";
17
String secretAccessKey = "your secret access key";
18
CaverExtKAS caver = new CaverExtKAS(ChainId.BAOBAB_TESTNET, accessKey, secretAccessKey);
19
20
//from must have KLAY to deploy and execute smart contract.
21
String from = "0x{address}";
22
String to = "0x{address}";
23
24
String contractAddress = "0x42c3809EeED7c5C497067fE4092D1c354D3a01Cb";
25
KIP7 kip7 = new KIP7(caver, contractAddress);
26
27
BigInteger transferAmount = BigInteger.ONE.multiply(BigInteger.TEN.pow(18));
28
SendOptions sendOptions = new SendOptions(from);
29
TransactionReceipt.TransactionReceiptData receiptData = kip7.transfer(to, transferAmount, sendOptions);
30
System.out.println(receiptData.getTransactionHash());
31
}
32
}
Copied!
위의 코드를 실행하면 아래와 같이 SmartContractExecution 트랜잭션의 Hash값이 출력됩니다.
1
0x752d6ac8cf7ba0e12de8c0200fda68925f588a0b614118e19568eec4ad3fe4dd
Copied!
Caver의 caver.kct.kip7에 관한 자세한 내용은 caver-js 혹은 caver-java을 확인하십시오.

KAS Wallet API의 클레이튼 계정으로 caver.kct.kip17 사용하기

caver.kct.kip17caver.wallet을 사용하여 Klaytn에 KIP-17 토큰 컨트랙트를 배포하거나 기배포된 KIP-17 토큰 컨트랙트를 실행하는 기능을 제공합니다. KAS SDK의 caver.wallet은 KAS Wallet API를 사용하는 지갑이기 때문에 KAS SDK의 caver.kct.kip17를 사용하면 KAS Wallet API의 클레이튼 계정을 사용하여 손쉽게 Klaytn에 KIP-17 토큰 컨트랙트를 배포하거나 실행할 수 있습니다.
KAS Wallet API의 클레이튼 계정을 사용하여 caver.kct.kip17를 사용하는 방법은 기존의 caver.kct.kip17를 사용하는 방법과 동일합니다. 여기서는 간단하게 KIP-17 토큰 컨트랙트를 배포하고 실행하는 방법을 설명합니다. 여기서 토큰 컨트랙트를 배포하고 실행할 때 사용되는 계정은 KAS Wallet API에서 관리되고 있는 클레이튼 계정이며, 이 계정은 트랜잭션을 전송하기 위한 충분한 KLAY를 소유하고 있어야 합니다.
KAS SDK는 KAS의 KIP-17 API를 제공합니다. KAS의 KIP-17 API를 사용하려면 Tutorial 혹은 API Reference Docs(JS, JAVA)를 참고하세요.

KAS SDK(caver-js extension)

caver-js-ext-kas를 사용하여 KIP-17 토큰 컨트랙트를 배포하는 방법은 아래와 같습니다.
1
// caver-js-ext-kas
2
const CaverExtKAS = require('caver-js-ext-kas')
3
4
const chainId = 1001
5