계정 업데이트

Wallet API를 활용한 계정 키 업데이트 트랜잭션을 Kaia에 전송하는 방법을 안내합니다.

튜토리얼에 앞서

  • API 호출에 사용되는 x-chain-id 값은 8217 (Mainnet) 또는 1001 (Kairos)입니다.
  • API 호출에 필요한 필수 파라미터는 각 예시에 설명됩니다.

API 호출 시 사용자가 입력해야 하는 값은 중괄호 1개({})로 표시합니다. 사용자가 입력해야 하는 값은 아래 테이블과 같습니다.

항목 비고
chain-id 8217 또는 1001 Kaia 메인넷 또는 Kairos
secret-access-key 인증 비밀번호 KAS Console > [Security] > [Credential]에서 발급받은 secretAccessKey
krn (optional) 계정 저장소의 ID 기본 계정 저장소 사용 시 불필요

API 인증 키가 있으면 모든 KAS 서비스를 사용할 수 있으며 Wallet API를 호출해 만든 Kaia 계정에 대한 모든 권한을 소유합니다. 모든 권한에는 Kaia 계정의 자산(KAIA 등) 이동이나 트랜잭션 전송 및 실행 권한이 포함됩니다. 만약 API 인증 키에 타인이 접근한다면 Kaia 계정 권한을 탈취당해 원치 않는 트랜잭션이 발생할 수 있습니다.

danger

KAS/Kaia 계정 보안을 위해 KAS API 인증 키(Secret Access Key)를 타인과 함부로 공유하지 말고 주의해 관리하십시오.

Kaia 계정 업데이트

Kaia 계정을 다른 계정으로 업데이트한다는 것은, 계정 키를 다른 키로 바꾼다는 것과 같은 뜻입니다. 예를 들어, 레거시 계정을 다중 서명 계정으로 업데이트하는 것은 내 Kaia 계정 키를 레거시 키에서 다중 서명 키로 바꾼다는 것과 동일합니다.

info

Kaia 계정과 계정 키에 관한 자세한 내용은 다음을 확인하십시오.

Kaia 계정 키

모든 트랜잭션은 서명을 받아야 Kaia에 전송되고, Kaia에 전송되어야 실행됩니다. Kaia 계정 키는 트랜잭션에 서명할 때 사용되지만, KAS를 사용하는 여러분은 일반적인 상황(KAIA 전송, 스마트 컨트랙트 배포 등)에서는 서명하지 않고도 트랜잭션을 보낼 수 있습니다. 여기서 일반적이지 않고 특수한 상황이란 1개의 트랜잭션에 여러 계정의 서명을 받아야 하거나(다중 서명), KAS에서 관리하는 Kaia 계정 서명이 아닌 KAS 외부 Kaia 계정 서명이 필요할 때(외부 서명)를 말합니다.

info

KAS에서도 트랜잭션에 서명하는 API를 제공합니다.

트랜잭션 서명에 사용하는 Kaia 계정 키에는 크게 일반적인 공개키, 다중 서명용 키, 역할 기반 키가 있습니다.

info

Kaia 키 타입(keyType)에 관한 자세한 내용은 다음을 확인하십시오.

계정 키를 다중 서명 키로 변경

여기서 소개하는 내용은 트랜잭션 전송 계정이 전송 수수료를 부담할 때 계정 키를 다중 서명 키로 변경하는 방법입니다.

먼저 Kaia 계정 키를 다중 서명 키로 바꾸는 트랜잭션을 보냅니다. 계정 키를 다중 서명 키 외에 다른 키로도 바꿀 수 있습니다. Kaia 계정 키 종류는 Kaia Docs의 계정을 확인하십시오.

info

Kaia 계정을 다중 서명(MultiSig) 계정으로 업데이트하는 것은 계정 키를 AccountKeyWeightedMultiSig로 업데이트하는 것과 동일합니다.

warning

다중 서명 키를 구성하는 각 키를 가지고 있는 계정들은 모두 같은 계정 저장소에 있어야 합니다.

info

KAS SDK(caver-js/caver-java extension) 설치, 실행에 관한 자세한 내용은 KAS SDK를 확인하십시오.
계정 저장소 생성, 계정 생성, 계정 선택에 관한 자세한 내용은 Getting Started를 확인하십시오.

API 호출

계정을 업데이트하려면 Kaia Node에 트랜잭션을 보내야 합니다. 이때 트랜잭션 수수료를 지불해야 합니다. 아래 예시를 따라 계정 업데이트 트랜잭션을 보내면 트랜잭션을 보내는 계정이 수수료를 직접 지불합니다. API를 호출하기 위해 계정 저장소와 계정을 생성하고 사용할 계정을 선택하세요.

내 계정 정보, 새롭게 사용할 키 정보를 입력하고 계정 업데이트 트랜잭션 전송 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다. 아래 API 호출 예시는, Kaia 계정을 기준치가 3이고 트랜잭션 서명용 키가 4개이며 각 키는 가중치 1씩을 갖는 다중 서명 계정으로(=다중 서명 키를 갖도록) 업데이트합니다.

cURLJavaScriptJava
Copy
Copied
curl --location --request PUT "https://wallet-api.klaytnapi.com/v2/tx/account" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
  "from": "0x5bb85d4032354E88020595AFAFC081C24098202e",
  "accountKey": {
    "keyType": 4,
    "key": {
      "threshold": 3,
      "weightedKeys": [
        {
          "weight": 1,
          "publicKey": "0x041c5c34cafdefddfd5d0c8baa9e9f75ff6aa6dc597776e5bf06e231c57926a2cb9a86f9d30c4760e70f30f08cf234e7847365bc5a1696223cfef73cd188e422ec"
        },
        {
          "weight": 1,
          "publicKey": "0x045552e73f34964eb04cad0d3c3dbd7cfeebbfb420ca83b1e7c640a9c76b42a4ca2308ddbdee4044c9f52a248ce3eee51c155c9d0567f3ebb32b4db38962f30f66"
        },
        {
          "weight": 1,
          "publicKey": "0x04ab9910325fd645a556fee3c6bbd8651be4fbff6688634d826474f3ef4baff7b1e4e48936db4cdb0fb3474beea3ba870bb0e7f9b0eb7c9e7b4e613bca90dec2"
        },
        {
          "weight": 1,
          "publicKey": "0x04a1c4e3830f19d1fb2c78d00cd5b29f75cdcc706a8611cbf4192c2d20f4899cba2ecee4706d0c58bdcbc2a634f7794cd43ecf02c6f1fc383a8bf8b1509dfdc493"
        }
      ]
    }
  },
  "nonce": 0,
  "gasLimit": 1000000,
  "submit": true
}"
Copy
Copied
// Update to AccountKeyLegay
const tx = {
  from: "0xA209b6D2DF012d63D798cB0BD0D7E0c53FddF649",
  accountKey: { keyType: 1 },
  gas: 1000000,
  submit: true,
};
const result = await caver.kas.wallet.requestAccountUpdate(tx);

// Update to AccountKeyPublic
const tx = {
  from: "0x948C163A29Fc31996CCb478Fe4bA17C891Dc6221",
  accountKey: {
    keyType: 2,
    key: "0x049e24b9f7b59730cd45cb8be47b32f88fb428798dde1d723e79f80f2c200cc8a2fcdaa340979c09dbaecad698825537c401624cf9ba1b7724650fe67056968c1c",
  },
  gas: 1000000,
  submit: true,
};
const result = await caver.kas.wallet.requestAccountUpdate(tx);

// Update to AccountKeyFail
const tx = {
  from: "0x7d0B0321FB82d70C3A2dDa1ab9112a6d58c94ADF",
  accountKey: { keyType: 3 },
  gas: 1000000,
  submit: true,
};
const result = await caver.kas.wallet.requestAccountUpdate(tx);

// Update to AccountKeyWeightedMultiSig
const tx = {
  from: "0x443f01B81ECC1e83dC46edA711F3D707511ef257",
  accountKey: {
    keyType: 4,
    key: {
      threshold: 2,
      weightedKeys: [
        {
          weight: 1,
          publicKey:
            "0x04a4dad8e41de69fdbf7c2d3b76eeeed47d449fd680d7dda0ae6346ac9e2c8de1637d8cbc4adbfa7b0f02ffedf39d8edb7dae983ba24a33fcdde37feedbe2a5cd7",
        },
        {
          weight: 1,
          publicKey:
            "0x0424a43009be004a10cf6d2d7ddb3fa31aa8e73bf540d8ad2a7a870c697981f3743f3691a45fc1c5ff13a7f521c5488b5a7926063b307c0def3d5f8f1f3a7fde0b",
        },
      ],
    },
  },
  gas: 1000000,
  submit: true,
};
const result = await caver.kas.wallet.requestAccountUpdate(tx);

// Update to AccountKeyRoleBased
const tx = {
  from: "0x7fe2434DA3B6Af4e23bB234a3972ab0bD9bad1bc",
  accountKey: {
    keyType: 5,
    key: [
      { keyType: 3, key: {} },
      {
        keyType: 4,
        key: {
          threshold: 2,
          weightedKeys: [
            {
              weight: 1,
              publicKey:
                "0x04abad100b699ea183959102c17d7792ba86b324548888ab4affb19bf814ea821066792679df7f1d8ce9075b93e29072d5600684a41a4614c1be9b3714302d9c4a",
            },
            {
              weight: 1,
              publicKey:
                "0x04c32ba77e5741783945a1ad7e2f201961d11e8e8192b104a2402e6307e9d7d9a77412693846eedc33083279e7e78e5619400bf194d8230ecec1f57cd14b791c2d",
            },
          ],
        },
      },
      {
        keyType: 2,
        key: "0x045505870ac8b7024e2b9eee23b8317eb79b796e44ece3fbb1d637d7a657bdbf0b3274216df59b1edf35bc94e4859357b5051cfaa8b5f659aae78a4d9bd2d8d6be",
      },
    ],
  },
  gas: 1000000,
  submit: true,
};
const result = await caver.kas.wallet.requestAccountUpdate(tx);
Copy
Copied
// Update to AccountKeyLegay
AccountUpdateTransactionRequest requestLegacy = new AccountUpdateTransactionRequest();
requestLegacy.setFrom("0x3723dc535131bba5108b6bfe6ccf2d2e512bdc91");
requestLegacy.setAccountKey(new KeyTypeLegacy());
requestLegacy.setSubmit(true);

TransactionResult result = caver.kas.wallet.requestAccountUpdate(requestLegacy);
System.out.println(result);


// Update to AccountKeyPublic
AccountUpdateTransactionRequest request = new AccountUpdateTransactionRequest();
request.setFrom("0x50f7ec091d363f9180f95921cbb2ad98c09a0822");
request.setAccountKey(new KeyTypePublic(account.getPublicKey()));
request.setSubmit(true);

TransactionResult result = caver.kas.wallet.requestAccountUpdate(request);
System.out.println(result);


// Update to AccountKeyFail
AccountUpdateTransactionRequest request = new AccountUpdateTransactionRequest();
request.setFrom("0xFdd009222A79179CDe24F15Da6022A9cF302fcD3");
request.setAccountKey(new KeyTypeFail());
request.setSubmit(true);

TransactionResult result = caver.kas.wallet.requestAccountUpdate(request);
System.out.println(result);


// Update to AccountKeyWeightedMultiSig
String publicKey1 = "0x048ab2585966fd8756e7565b9a6619a10f2b0c073825b66aafb9e474a03abc025bc27d9dd2304c90737160a206af7c938261d9efa0327474c858526104470f236b";
String publicKey2 = "0x0400df261720508aaeb0cd1ce01095e4a3fa88beef7300ab4663fa4769f74e0f4871258f438f11674f8d32c769d11e89eb7bcf7df382ceea0bc10a6a1e57e678a0";
String publicKey3 = "0x04b79fd28c45c3ca2ad6da97f8ba575605de16d249925a2321b8776f338d500eb2ce2b0530922564cb555a16435fc036f1eb007fc22ba9b9903cb6af0cb22f9ec3";

MultisigUpdateKey multisigUpdateKey = new MultisigUpdateKey();
multisigUpdateKey.setThreshold((long)2);
multisigUpdateKey.setWeightedKeys(
        Arrays.asList(createMultiSig(2, publicKey1),
                createMultiSig(1, publicKey2),
                createMultiSig(1, publicKey3))
);

KeyTypeMultiSig keyTypeMultiSig = new KeyTypeMultiSig(multisigUpdateKey);

AccountUpdateTransactionRequest request = new AccountUpdateTransactionRequest();
request.setFrom("0xba4C0E1f4f67EE60BD4c72933535BC3B5a4819a2");
request.setAccountKey(keyTypeMultiSig);
request.setSubmit(true);

TransactionResult result = caver.kas.wallet.requestAccountUpdate(request);
System.out.println(result);


// Update to AccountKeyRoleBased
KeyTypePublic txKey = new KeyTypePublic();
txKey.setKey("0x0439a181139c535990b24c10e7f5d7c6155b74098a674d6bbe92a8fa3ec8482557dba13d7381ddb9d66cbecc604d293f87f918ff341973cac2400c7e342bd244f2");

KeyTypePublic accountUpdateKey = new KeyTypePublic();
accountUpdateKey.setKey("0x0454e19cf077e460f251ccc9f3c23737dbf15ef9c593d1b132ce0d18f028a93df5cec8e06bde9fe5cd3a60c1a18728bd20998067f86ce602f968fcd0e24d9da1cf");


String publicKey1 = "0x048ab2585966fd8756e7565b9a6619a10f2b0c073825b66aafb9e474a03abc025bc27d9dd2304c90737160a206af7c938261d9efa0327474c858526104470f236b";
String publicKey2 = "0x0400df261720508aaeb0cd1ce01095e4a3fa88beef7300ab4663fa4769f74e0f4871258f438f11674f8d32c769d11e89eb7bcf7df382ceea0bc10a6a1e57e678a0";
String publicKey3 = "0x04b79fd28c45c3ca2ad6da97f8ba575605de16d249925a2321b8776f338d500eb2ce2b0530922564cb555a16435fc036f1eb007fc22ba9b9903cb6af0cb22f9ec3";

MultisigUpdateKey multisigUpdateKey = new MultisigUpdateKey();
multisigUpdateKey.setThreshold((long)2);
multisigUpdateKey.setWeightedKeys(
        Arrays.asList(createMultiSig(2, publicKey1),
                createMultiSig(1, publicKey2),
                createMultiSig(1, publicKey3))
);

KeyTypeMultiSig fdKey = new KeyTypeMultiSig(multisigUpdateKey);

KeyTypeRoleBased roleBasedUpdateKeyType = new KeyTypeRoleBased(Arrays.asList(txKey, accountUpdateKey, fdKey));

AccountUpdateTransactionRequest request = new AccountUpdateTransactionRequest();
request.setFrom("0xcf8b7b2c58805280ee4bb4d3fab17af8c6d9decf");
request.setAccountKey(roleBasedUpdateKeyType);
request.setGas(250000l);
request.setSubmit(true);

TransactionResult result = caver.kas.wallet.requestAccountUpdate(request);
System.out.println(result);
  • submit : false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.

API 응답

계정 업데이트 트랜잭션 전송 API의 응답은 아래와 같습니다.

cURLJavaScriptJava
Copy
Copied
{
  "accountKey": "0x04f89303f890e301a1021c5c34cafdefddfd5d0c8baa9e9f75ff6aa6dc597776e5bf06e231c57926a2cbe301a1025552e73f34964eb04cad0d3c3dbd7cfeebbfb420ca83b1e7c640a9c76b42a4cae301a102ab9910325fd645a556fee3c6bbd8651be4fbff6688634d826474f3ef4baff7b1e301a103a1c4e3830f19d1fb2c78d00cd5b29f75cdcc706a8611cbf4192c2d20f4899cba",
  "from": "0x325dbaf78b393dc2115138c86a58f897ed413aff",
  "gasLimit": 1000000,
  "gasPrice": "0x5d21dba00",
  "nonce": 2,
  "rlp": "0x20f90101028505d21dba00830f424094325dbaf78b393dc2115138c86a58f897ed413affb89604f89303f890e301a1021c5c34cafdefddfd5d0c8baa9e9f75ff6aa6dc597776e5bf06e231c57926a2cbe301a1025552e73f34964eb04cad0d3c3dbd7cfeebbfb420ca83b1e7c640a9c76b42a4cae301a102ab9910325fd645a556fee3c6bbd8651be4fbff6688634d826474f3ef4baff7b1e301a103a1c4e3830f19d1fb2c78d00cd5b29f75cdcc706a8611cbf4192c2d20f4899cbaf847f8458207f5a0c669b62293629316d18e12cd90d5c4dc24000e13d31200c53e40ac8f01bf249ea062be831829631503e20cccd160fe1ec450950e6f982df16d83d3f6f948924aa1",
  "signatures": [
    {
      "R": "0xc669b62293629316d18e12cd90d5c4dc24000e13d31200c53e40ac8f01bf249e",
      "S": "0x62be831829631503e20cccd160fe1ec450950e6f982df16d83d3f6f948924aa1",
      "V": "0x7f5"
    }
  ],
  "status": "Submitted",
  "transactionHash": "0xd596aad17c6cf9f0fd9f3710652e00ebedd4f91cadc6cd856563e856492bd41c",
  "typeInt": 32
}
Copy
Copied
TransactionResult {
  from: '0x7fe2434da3b6af4e23bb234a3972ab0bd9bad1bc',
  gas: 1000000,
  gasPrice: '0x5d21dba00',
  nonce: 0,
  rlp: '0x20f8e5808505d21dba00830f4240947fe2434da3b6af4e23bb234a3972ab0bd9bad1bcb87a05f8778203c0b84e04f84b02f848e301a102abad100b699ea183959102c17d7792ba86b324548888ab4affb19bf814ea8210e301a103c32ba77e5741783945a1ad7e2f201961d11e8e8192b104a2402e6307e9d7d9a7a302a1025505870ac8b7024e2b9eee23b8317eb79b796e44ece3fbb1d637d7a657bdbf0bf847f8458207f6a0a7f12de6c2093f63d83f04d456446dfbd20c84473c68450ad874370fdde756c5a064bb0fabf09ef769a96bff45d1f74a108463409b3f4058a1f881d6ea9868e3aa',
  typeInt: 32,
  signatures: [
    Signature {
      R: '0xa7f12de6c2093f63d83f04d456446dfbd20c84473c68450ad874370fdde756c5',
      S: '0x64bb0fabf09ef769a96bff45d1f74a108463409b3f4058a1f881d6ea9868e3aa',
      V: '0x7f6'
    }
  ],
  status: 'Submitted',
  transactionHash: '0x6043beed2284b8223edef80c0bc562af36be300fb83be0377859a4d2968823cb',
  accountKey: '0x05f8778203c0b84e04f84b02f848e301a102abad100b699ea183959102c17d7792ba86b324548888ab4affb19bf814ea8210e301a103c32ba77e5741783945a1ad7e2f201961d11e8e8192b104a2402e6307e9d7d9a7a302a1025505870ac8b7024e2b9eee23b8317eb79b796e44ece3fbb1d637d7a657bdbf0b'
}
Copy
Copied
class TransactionResult {
    from: 0x50f7ec091d363f9180f95921cbb2ad98c09a0822
    gas: 1000000
    gasPrice: 0x5d21dba00
    input: null
    nonce: 0
    rlp: 0x20f88d808505d21dba00830186a09450f7ec091d363f9180f95921cbb2ad98c09a0822a302a103aa8fe5f10690ddbc02cc69f6777b6e8d5e0fe5a21a791b63899d7bb1395c6813f847f8458207f5a00154c1b29101d07513215222bbc113f4825c1bebe3f5a9c8c395c1cb9c5b16e3a053c32a15b14d753eed6bec46db48fa04ec31ae307d2a76445dea2ab268917eb0
    signatures: [class Signature {
        R: 0x154c1b29101d07513215222bbc113f4825c1bebe3f5a9c8c395c1cb9c5b16e3
        S: 0x53c32a15b14d753eed6bec46db48fa04ec31ae307d2a76445dea2ab268917eb0
        V: 0x7f5
    }]
    status: Submitted
    to: null
    transactionHash: 0x52eb902ed67ca67fea6f7de5de6a2999a217283667c92061123242a9436aefcd
    typeInt: 32
    value: null
    code: null
    message: null
    transactionId: null
    accountKey: 0x02a103aa8fe5f10690ddbc02cc69f6777b6e8d5e0fe5a21a791b63899d7bb1395c6813
}

이 API에 관한 자세한 내용은 다음을 확인하십시오.
이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.

계정 키를 역할 기반 키로 변경 1

여기서 소개하는 내용은 수수료 대납 계정이 트랜잭션 전송 수수료를 부담할 때 계정 키를 역할 기반 키로 변경하는 방법입니다. Kaia 계정 키를 역할 기반 키로 바꾸는 트랜잭션을 보냅니다. 계정 키를 역할 기반 키 외에 다른 키로 바꿀 수 있으며 마찬가지로 수수료 대납 계정이 이 트랜잭션 수수료를 대납하게 할 수 있습니다. Kaia 계정 키 종류는 다음을 확인하십시오.

info

Kaia 계정을 역할 기반 계정으로 업데이트하는 것은 계정 키를 AccountKeyRoleBased로 업데이트하는 것과 동일합니다.

KAS로 계정 업데이트 트랜잭션을 전송하려면 Kaia Node에 트랜잭션을 보내야 하며, 트랜잭션을 보내려면 트랜잭션 수수료를 지불해야 합니다. API를 호출하려면 계정 저장소, 수수료 대납 계정 저장소에 각각 계정, 수수료 대납 계정을 생성하고 사용할 계정, 수수료 대납 계정을 선택해야 합니다.

이 예시를 따라 계정 업데이트 트랜잭션을 보내면, 보내는 계정(Account)이 아니라 다른 계정(여러분의 수수료 대납 계정)이 이 트랜잭션 수수료를 대신 부담합니다. KAS에서 제공하는 수수료 대납 방식에 관한 자세한 내용은 다음을 확인하십시오.

info

KAS SDK(caver-js/caver-java extension) 설치, 실행에 관한 자세한 내용은 KAS SDK를 확인하십시오.
계정 저장소 생성, 계정 생성, 계정 선택에 관한 자세한 내용은 Getting Started를 확인하십시오.
수수료 대납 계정 저장소 생성, FeePayerAccount 생성, FeePayerAccount 선택에 관한 자세한 내용은 Getting Started를 확인하십시오.

API 호출

수수료 대납 방식 계정 업데이트 트랜잭션 전송 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다. 아래 API 호출 예시는, Kaia 계정을 역할 기반 키(AccountKeyRoleBased, KAS에서는 keyType:5)로 업데이트합니다. 어떤 Kaia 계정이 역할 기반 키를 가지면 이 계정은 자신이 수행하는 역할(Role)에 따라 다른 키를 트랜잭션 서명에 사용합니다.

info

Kaia 키 타입(keyType)에 관한 자세한 내용은 다음을 확인하십시오.

역할은 크게 일반 트랜잭션 전송(KAIA 전송, 컨트랙트 배포, 컨트랙트 실행 등), 계정 업데이트, 수수료 대납의 3가지가 있습니다. 아래 API 호출 예시는 일반 트랜잭션 전송용으로 AccountKeyPublic(keyType:2) 키, 계정 업데이트용으로 AccountKeyFail(keyType:3) 키, 수수료 대납용으로 AccountKeyWeightedMultiSig(keyType:4) 키를 가진 계정으로 업데이트 합니다. 여기서 수수료 대납용 키는 기준치가 2이고 트랜잭션 서명용 키가 2개이며 각 키는 가중치 1씩을 갖는 다중 서명용 키입니다. 이 계정은 계정 업데이트 역할에 AccountKeyFail을 입력했으므로 계정을 업데이트하는 역할을 수행하지 않습니다.

info

계정 키를 역할 기반 키로 바꿀 때 특정 역할을 배제하고 싶다면, 배제하려는 역할 키에는 keyType=3(AccountKeyFail)을 입력하십시오.

info

계정 키를 역할 기반 키로 바꿀 때 특정 역할만 업데이트하고 싶다면, 업데이트하고 싶지 않은 역할 키에는 keyType=128(AccountKeyNil)을 입력하십시오.

cURLJavaScriptJava
Copy
Copied
curl --location --request PUT "https://wallet-api.klaytnapi.com/v2/tx/fd-user/account" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
  "from": "0x5bb85d4032354E88020595AFAFC081C24098202e",
  "accountKey": {
    "keyType": 5,
    "key": [
      {
        "keyType": 3,
        "key": {}
      },
      {
        "keyType": 4,
        "key": {
          "threshold": 2,
          "weightedKeys": [
            {
              "weight": 1,
              "publicKey": "0xe4a01407460c1c03ac0c82fd84f303a699b210c0b054f4aff72ff7dcdf01512da5735a23ce1654b14680054a993441eae7c261983a56f8e0da61280758b5919"
            },
            {
              "weight": 1,
              "publicKey": "0x36f6355f5b532c3c1606f18fa2be7a16ae200c5159c8031dd25bfa389a4c9c066fdf9fc87a16ac359e66d9761445d5ccbb417fb7757a3f5209d713824596a50d"
            }
          ]
        }
      },
      {
        "keyType": 2,
        "key": "0x698a5769e28d0a2cf138a4f6533b158e90f1000a6331fe56aea628cf061f74f27cbef61d21ed45e6675e220b73912c76522bfae899ddde4eb25926617fb89d5d"
      }
    ]
  },
  "nonce": 0,
  "gasLimit": 1000000,
  "submit": true,
  "feePayer": "0x85B98485444c89880cD9C48807CEF727C296F2da",
  "feeRatio": 10
}"
Copy
Copied
// 각 AccountKey 타입 별 트랜잭션 포맷은 페이지 상단의 "계정 키를 다중 서명 키로 변경: 트랜잭션을 보내는 계정이 트랜잭션 전송 수수료를 부담하기" 챕터를 참고하십시오.
const tx = {
  from: "0xA3E79115c78bbC8eFdDA2a17a4Bdb48Dca2b5333",
  accountKey: {
    keyType: 4,
    key: {
      threshold: 2,
      weightedKeys: [
        {
          weight: 1,
          publicKey:
            "0x04371334d038d983f3b560b2534385138ffaf69cf1aef039b268ef69c1736ec6544bc9a04598ca5ba4c2e75e648c6d8e6a892b33662bfe680544daa53c75b06e35",
        },
        {
          weight: 1,
          publicKey:
            "0x041640a55aed2c871f8896a263b378ce73e323254de9173fd071bb29aa8d4c52855ed8b4164db5db21d3c4e3baed2611d9d34932f36b6096086eee0c690417fb97",
        },
      ],
    },
  },
  gas: 1000000,
  feePayer: "0x44Ee3906a7a2007762E9d706dF6E4eF63FA1edA8",
  submit: true,
};
const result = await caver.kas.wallet.requestFDAccountUpdatePaidByUser(tx);
Copy
Copied
String publicKey1 = "0x0459b8b2f0297f8fc96326254c4b6dc706c53119626ab1a524b629af9e7bcbe153b81c6a4870e76ca6533a9ac10c879a19cbe415fcb481dcd13ddf42ecbc877c11";
String publicKey2 = "0x0471ed41581d6cd86499cfa0980db20b86c9a5028b5b2fbce6eef92a297f3ba96f3bfda8b42a45a43868dd4308f2fa8e068d25701ce6c53bbddc6c6e7bd1d7049c";
String publicKey3 = "0x04508fd5b298583115eb69b445d13c1dc5ccf96a73e1135bb52f4852b35206468c3b21dcbae4560ef34638632827539e8a770dbc922b9e7e1bd5f30c3dd84bb19b";

MultisigUpdateKey multisigUpdateKey = new MultisigUpdateKey();
multisigUpdateKey.setThreshold((long)2);
multisigUpdateKey.setWeightedKeys(
        Arrays.asList(createMultiSig(2, publicKey1),
                createMultiSig(1, publicKey2),
                createMultiSig(1, publicKey3))
);

KeyTypeMultiSig keyTypeMultiSig = new KeyTypeMultiSig(multisigUpdateKey);

FDAccountUpdateTransactionRequest request = new FDAccountUpdateTransactionRequest();
request.setFrom("0x08Ba68AC55396e291adD39292E0280b08342FE2b");
request.setAccountKey(keyTypeMultiSig);
request.setFeePayer("0x31d845Ac80A0B2a38f6267CabcF34F8fA9DcD2B7");
request.setSubmit(true);

FDTransactionResult result = caver.kas.wallet.requestFDAccountUpdatePaidByUser(request);
System.out.println(result);
  • submit : false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.
  • feePayer : 사용자가 트랜잭션 수수료를 대납하는 계정을 별도로 사용할 때, 이 계정 주소를 여기에 입력합니다. KAS에서 먼저 수수료를 대납해주는 방식을 사용하려면 feePayer 파라미터 자체를 사용하지 않습니다.
  • feeRatio : 트랜잭션 수수료 전체에서 feePayer 가 납부할 비율(1%~99%)입니다. 나머지 비율은 트랜잭션을 Kaia에 보내는 from 이 직접 납부합니다. 사용자 대납 계정으로 납부하거나 KAS에서 수수료를 대납하는 2가지 방식 모두, feeRatio를 사용할 수 있습니다.

API 응답

수수료 대납 계정 업데이트 트랜잭션 전송 API의 응답은 아래와 같습니다.

cURLJavaScriptJava
Copy
Copied
{
  "accountKey": "0x05f8778203c0b84e04f84b02f848e301a103e4a01407460c1c03ac0c82fd84f303a699b210c0b054f4aff72ff7dcdf01512de301a10336f6355f5b532c3c1606f18fa2be7a16ae200c5159c8031dd25bfa389a4c9c06a302a103698a5769e28d0a2cf138a4f6533b158e90f1000a6331fe56aea628cf061f74f2",
  "feePayer": "0xe8ab1729ab614551021cf5cc22c0e037f5a82930",
  "from": "0x9c56b45b7443bc73f47234199982481c64807f78",
  "gasLimit": 1000000,
  "gasPrice": "0x5d21dba00",
  "nonce": 6,
  "rlp": "0x21f90143068505d21dba00830f4240949c56b45b7443bc73f47234199982481c64807f78b87a05f8778203c0b84e04f84b02f848e301a103e4a01407460c1c03ac0c82fd84f303a699b210c0b054f4aff72ff7dcdf01512de301a10336f6355f5b532c3c1606f18fa2be7a16ae200c5159c8031dd25bfa389a4c9c06a302a103698a5769e28d0a2cf138a4f6533b158e90f1000a6331fe56aea628cf061f74f2f847f8458207f5a0417123ce3a739bda66493ccf83bbc2b0e6a8a5ef181c04a9cbf76169abb106b6a024d596ce7e8f108012f26ec8853a1b9b65b4e670be8de7cbcbe73709f3a3179994e8ab1729ab614551021cf5cc22c0e037f5a82930f847f8458207f5a0b2917ba146947e7898f3df954ffde028cf11c5f23338b3eccc5e1ce20e73ec9ca05251179f052c064813fecae03ec07b121622f8352c599c12f4671784d6b94a03",
  "signatures": [
    {
      "R": "0x417123ce3a739bda66493ccf83bbc2b0e6a8a5ef181c04a9cbf76169abb106b6",
      "S": "0x24d596ce7e8f108012f26ec8853a1b9b65b4e670be8de7cbcbe73709f3a31799",
      "V": "0x7f5"
    }
  ],
  "status": "Submitted",
  "transactionHash": "0x6bd7c53520171aa9dfb535b62ac35e97a16798de7060eb844cbad6afbd847b86",
  "typeInt": 33
}
Copy
Copied
FDTransactionResult {
  feePayer: '0x44ee3906a7a2007762e9d706df6e4ef63fa1eda8',
  from: '0xa3e79115c78bbc8efdda2a17a4bdb48dca2b5333',
  gas: 1000000,
  gasPrice: '0x5d21dba00',
  nonce: 0,
  rlp: '0x21f90117808505d21dba00830f424094a3e79115c78bbc8efdda2a17a4bdb48dca2b5333b84e04f84b02f848e301a103371334d038d983f3b560b2534385138ffaf69cf1aef039b268ef69c1736ec654e301a1031640a55aed2c871f8896a263b378ce73e323254de9173fd071bb29aa8d4c5285f847f8458207f5a072332d0c98a364702d5da44f75ea2945d030cd6d540221433248dacf7d7cc543a01c689fe90dbc086c88a7faf9d160a544de711c905633c252b4d825e7c7396a189444ee3906a7a2007762e9d706df6e4ef63fa1eda8f847f8458207f6a052ba46bc1616929027ba54df4a736bd021ba4603c3a3bb19d6b4e4150bc4bf3fa077fa110b70b964beb79e895a5f9476a8b594b0fce2912c51c22a97c1e482b950',
  typeInt: 33,
  signatures: [
    Signature {
      R: '0x72332d0c98a364702d5da44f75ea2945d030cd6d540221433248dacf7d7cc543',
      S: '0x1c689fe90dbc086c88a7faf9d160a544de711c905633c252b4d825e7c7396a18',
      V: '0x7f5'
    }
  ],
  status: 'Submitted',
  transactionHash: '0x9d2fd76c3962f013a9f81f7a03f3237b09efd465a81b60ebbcd476b4472e9fe3',
  accountKey: '0x04f84b02f848e301a103371334d038d983f3b560b2534385138ffaf69cf1aef039b268ef69c1736ec654e301a1031640a55aed2c871f8896a263b378ce73e323254de9173fd071bb29aa8d4c5285'
}
Copy
Copied
class FDTransactionResult {
    feePayer: 0x31d845ac80a0b2a38f6267cabcf34f8fa9dcd2b7
    from: 0xdd9f780ef810138a9625071b45211b00a76c9c43
    gas: 1000000
    gasPrice: 0x5d21dba00
    input: null
    nonce: 0
    rlp: 0x21f9013b808505d21dba00830186a094dd9f780ef810138a9625071b45211b00a76c9c43b87204f86f02f86ce302a10359b8b2f0297f8fc96326254c4b6dc706c53119626ab1a524b629af9e7bcbe153e301a10271ed41581d6cd86499cfa0980db20b86c9a5028b5b2fbce6eef92a297f3ba96fe301a103508fd5b298583115eb69b445d13c1dc5ccf96a73e1135bb52f4852b35206468cf847f8458207f6a0942b8febf7814a978d50144a086fb8266d6946f2b00d7d94a162245f8606b52ca0129d39b1d9f957ba61f7d2ead87dbc8eeeedf758d4846385a0ad66e21e67f5419431d845ac80a0b2a38f6267cabcf34f8fa9dcd2b7f847f8458207f6a079da3d049da82db02191c3df171af460043f13cd480b029d35d77a36dede494fa009eb920ba1c809d5a06912f09b0888ac92abd32ed08dba987f85dedd91d80bcd
    signatures: [class Signature {
        R: 0x942b8febf7814a978d50144a086fb8266d6946f2b00d7d94a162245f8606b52c
        S: 0x129d39b1d9f957ba61f7d2ead87dbc8eeeedf758d4846385a0ad66e21e67f541
        V: 0x7f6
    }]
    status: Submitted
    to: null
    transactionHash: 0x3d0b8802d1c16655115803f23f4866c9e0fb5d18a02862fb4f979a1799b43bd8
    typeInt: 33
    value: null
    feeRatio: null
    transactionId: null
    accountKey: 0x04f86f02f86ce302a10359b8b2f0297f8fc96326254c4b6dc706c53119626ab1a524b629af9e7bcbe153e301a10271ed41581d6cd86499cfa0980db20b86c9a5028b5b2fbce6eef92a297f3ba96fe301a103508fd5b298583115eb69b445d13c1dc5ccf96a73e1135bb52f4852b35206468c
}
info

typeInt 변수는 트랜잭션 종류를 구별하는 값입니다. 트랜잭션의 종류에 관한 자세한 내용은 다음을 확인하십시오.

이 API에 관한 자세한 내용은 다음을 확인하십시오.
이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.

계정 키를 역할 기반 키로 변경 2

여기서 소개하는 내용은 KAS가 트랜잭션 전송 수수료를 부담할 때 계정 키를 역할 기반 키로 변경하는 방법입니다. Kaia 계정 키를 역할 기반 키로 바꾸는 트랜잭션을 보냅니다. 계정 키를 역할 기반 키 외에 다른 키로 바꿀 수 있으며 마찬가지로 수수료 대납 계정이 이 트랜잭션 수수료를 대납하게 할 수 있습니다. Kaia 계정 키 종류는 다음을 확인하십시오.

info

Kaia 계정을 역할 기반 계정으로 업데이트하는 것은 계정 키를 AccountKeyRoleBased로 업데이트하는 것과 동일합니다.

KAS로 계정 업데이트 트랜잭션을 전송하려면 Kaia Node에 트랜잭션을 보내야 하며, 트랜잭션을 보내려면 트랜잭션 수수료를 지불해야 합니다. API를 호출하려면 계정 저장소에 계정을 생성하고 사용할 계정을 선택해야 합니다. 이 예시를 따라 KAIA를 보내면, KAIA를 보내는 계정(Account)이 아니라 다른 계정(KAS의 글로벌 수수료 대납 계정)이 이 트랜잭션 수수료를 대신 부담합니다. KAS 글로벌 수수료 대납 계정(KAS GlobalFeePayer)이 트랜잭션을 전송하는 Kaia 계정을 대신해 부담한 수수료는 추후 여러분의 KAS 계정에 청구됩니다. KAS에서 제공하는 수수료 대납 방식에 관한 자세한 내용은 다음을 확인하십시오.

info

KAS SDK(caver-js/caver-java extension) 설치, 실행에 관한 자세한 내용은 KAS SDK를 확인하십시오.
계정 저장소 생성, 계정 생성, 계정 선택에 관한 자세한 내용은 Getting Started를 확인하십시오.

API 호출

KAS GlobalFeePayer 수수료 대납 방식 계정 업데이트 트랜잭션 전송 API를 호출합니다. API 호출 시 REST API를 사용할 수 있습니다. 아래 API 호출 예시는, Kaia 계정을 역할 기반 키(AccountKeyRoleBased, KAS에서는 keyType:5)로 업데이트합니다. 어떤 Kaia 계정이 역할 기반 키를 가지면 이 계정은 자신이 수행하는 역할(Role)에 따라 다른 키를 트랜잭션 서명에 사용합니다.

info

Kaia 키 타입(keyType)에 관한 자세한 내용은 다음을 확인하십시오.

역할은 크게 일반 트랜잭션 전송(KAIA 전송, 컨트랙트 배포, 컨트랙트 실행 등), 계정 업데이트, 수수료 대납의 3가지가 있습니다. 아래 API 호출 예시는 일반 트랜잭션 전송용으로 AccountKeyPublic(keyType:2) 키, 계정 업데이트용으로 AccountKeyFail(keyType:3) 키, 수수료 대납용으로 AccountKeyWeightedMultiSig(keyType:4) 키를 가진 계정으로 업데이트 합니다. 여기서 수수료 대납용 키는 기준치가 2이고 트랜잭션 서명용 키가 2개이며 각 키는 가중치 1씩을 갖는 다중 서명용 키입니다. 이 계정은 계정 업데이트 역할에 AccountKeyFail을 입력했으므로 계정을 업데이트하는 역할을 수행하지 않습니다.

info

계정 키를 역할 기반 키로 바꿀 때 특정 역할을 배제하고 싶다면, 배제하려는 역할 키에는 keyType=3(AccountKeyFail)을 입력하십시오.

info

계정 키를 역할 기반 키로 바꿀 때 특정 역할만 업데이트하고 싶다면, 업데이트하고 싶지 않은 역할 키에는 keyType=128(AccountKeyNil)을 입력하십시오.

cURLJavaScriptJava
Copy
Copied
curl --location --request PUT "https://wallet-api.klaytnapi.com/v2/tx/fd/account" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
  "from": "0x5bb85d4032354E88020595AFAFC081C24098202e",
  "accountKey": {
    "keyType": 5,
    "key": [
      {
        "keyType": 3,
        "key": {}
      },
      {
        "keyType": 4,
        "key": {
          "threshold": 2,
          "weightedKeys": [
            {
              "weight": 1,
              "publicKey": "0xe4a01407460c1c03ac0c82fd84f303a699b210c0b054f4aff72ff7dcdf01512da5735a23ce1654b14680054a993441eae7c261983a56f8e0da61280758b5919"
            },
            {
              "weight": 1,
              "publicKey": "0x36f6355f5b532c3c1606f18fa2be7a16ae200c5159c8031dd25bfa389a4c9c066fdf9fc87a16ac359e66d9761445d5ccbb417fb7757a3f5209d713824596a50d"
            }
          ]
        }
      },
      {
        "keyType": 2,
        "key": "0x698a5769e28d0a2cf138a4f6533b158e90f1000a6331fe56aea628cf061f74f27cbef61d21ed45e6675e220b73912c76522bfae899ddde4eb25926617fb89d5d"
      }
    ]
  },
  "nonce": 0,
  "gasLimit": 1000000,
  "submit": true,
  "feeRatio": 10
}"
Copy
Copied
// 각 AccountKey 타입 별 트랜잭션 포맷은 페이지 상단의 "계정 키를 다중 서명 키로 변경: 트랜잭션을 보내는 계정이 트랜잭션 전송 수수료를 부담하기" 챕터를 참고하십시오.
const tx = {
  from: "0xd19CeD8B6CA1d5924ECaf4321c1C8Fae64C2ADf8",
  accountKey: {
    keyType: 4,
    key: {
      threshold: 2,
      weightedKeys: [
        {
          weight: 1,
          publicKey:
            "0x04371334d038d983f3b560b2534385138ffaf69cf1aef039b268ef69c1736ec6544bc9a04598ca5ba4c2e75e648c6d8e6a892b33662bfe680544daa53c75b06e35",
        },
        {
          weight: 1,
          publicKey:
            "0x041640a55aed2c871f8896a263b378ce73e323254de9173fd071bb29aa8d4c52855ed8b4164db5db21d3c4e3baed2611d9d34932f36b6096086eee0c690417fb97",
        },
      ],
    },
  },
  gas: 1000000,
  submit: true,
};
const result =
  await caver.kas.wallet.requestFDAccountUpdatePaidByGlobalFeePayer(tx);
Copy
Copied
String publicKey1 = "0x04a9f0fbeab8c415e560c12266c51ecd90c71dd16ca97a99d3fd55f2eaf4698a1a68a942c0d25bd27f3d4e5604b394fb197b69091972d70d35927896633aae140c";
String publicKey2 = "0x0432ac2fa7aa17035999f9dc2b151d9b551a85e4acb6c61e2e4905bafcf64b5fb29f59f12d631a31a3fb32c9913945cfc623db4714471a7ceee4c2d39c99922691";
String publicKey3 = "0x040f381470965e1c939e792b583ae221fd5fb7524c25bc07221e2a80f71431ed2a2e859dfb641aa8c809d5e649d0b5fc3ba407369aa7e67f72d63d5a253f143048";

MultisigUpdateKey multisigUpdateKey = new MultisigUpdateKey();
multisigUpdateKey.setThreshold((long)2);
multisigUpdateKey.setWeightedKeys(
        Arrays.asList(createMultiSig(2, publicKey1),
                createMultiSig(1, publicKey2),
                createMultiSig(1, publicKey3))
);

KeyTypeMultiSig keyTypeMultiSig = new KeyTypeMultiSig(multisigUpdateKey);

FDAccountUpdateTransactionRequest request = new FDAccountUpdateTransactionRequest();
request.setFrom("0xEFBB861E098641550e5b1732454b1dD7BA008259");
request.setAccountKey(keyTypeMultiSig);
request.setSubmit(true);

FDTransactionResult result = caver.kas.wallet.requestFDAccountUpdatePaidByGlobalFeePayer(request);
System.out.println(result);
  • submit : false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.
  • feeRatio : 트랜잭션 수수료 전체에서 feePayer 가 납부할 비율(1%~99%)입니다. 나머지 비율은 트랜잭션을 Kaia에 보내는 from 이 직접 납부합니다.
    • 사용자 대납 계정으로 납부하거나 KAS에서 수수료를 대납하는 2가지 방식 모두, feeRatio를 사용할 수 있습니다.

API 응답

KAS GlobalFeePayer 수수료 대납 계정 업데이트 트랜잭션 전송 API의 응답은 아래와 같습니다.

cURLJavaScriptJava
Copy
Copied
{
  "accountKey": "0x05f8778203c0b84e04f84b02f848e301a103e4a01407460c1c03ac0c82fd84f303a699b210c0b054f4aff72ff7dcdf01512de301a10336f6355f5b532c3c1606f18fa2be7a16ae200c5159c8031dd25bfa389a4c9c06a302a103698a5769e28d0a2cf138a4f6533b158e90f1000a6331fe56aea628cf061f74f2",
  "feePayer": "0x85b98485444c89880cd9c48807cef727c296f2da",
  "feeRatio": 10,
  "from": "0x9c56b45b7443bc73f47234199982481c64807f78",
  "gasLimit": 1000000,
  "gasPrice": "0x5d21dba00",
  "nonce": 6,
  "rlp": "0x21f90143068505d21dba00830f4240949c56b45b7443bc73f47234199982481c64807f78b87a05f8778203c0b84e04f84b02f848e301a103e4a01407460c1c03ac0c82fd84f303a699b210c0b054f4aff72ff7dcdf01512de301a10336f6355f5b532c3c1606f18fa2be7a16ae200c5159c8031dd25bfa389a4c9c06a302a103698a5769e28d0a2cf138a4f6533b158e90f1000a6331fe56aea628cf061f74f2f847f8458207f5a0417123ce3a739bda66493ccf83bbc2b0e6a8a5ef181c04a9cbf76169abb106b6a024d596ce7e8f108012f26ec8853a1b9b65b4e670be8de7cbcbe73709f3a3179994e8ab1729ab614551021cf5cc22c0e037f5a82930f847f8458207f5a0b2917ba146947e7898f3df954ffde028cf11c5f23338b3eccc5e1ce20e73ec9ca05251179f052c064813fecae03ec07b121622f8352c599c12f4671784d6b94a03",
  "signatures": [
    {
      "R": "0x417123ce3a739bda66493ccf83bbc2b0e6a8a5ef181c04a9cbf76169abb106b6",
      "S": "0x24d596ce7e8f108012f26ec8853a1b9b65b4e670be8de7cbcbe73709f3a31799",
      "V": "0x7f5"
    }
  ],
  "status": "Submitted",
  "transactionHash": "0x6bd7c53520171aa9dfb535b62ac35e97a16798de7060eb844cbad6afbd847b86",
  "typeInt": 33
}
Copy
Copied
FDTransactionResult {
  feePayer: '0x1b71a63903e35371e2fc41c6012effb99b9a2c0f',
  from: '0xd19ced8b6ca1d5924ecaf4321c1c8fae64c2adf8',
  gas: 1000000,
  gasPrice: '0x5d21dba00',
  nonce: 0,
  rlp: '0x21f90117808505d21dba00830f424094d19ced8b6ca1d5924ecaf4321c1c8fae64c2adf8b84e04f84b02f848e301a103371334d038d983f3b560b2534385138ffaf69cf1aef039b268ef69c1736ec654e301a1031640a55aed2c871f8896a263b378ce73e323254de9173fd071bb29aa8d4c5285f847f8458207f5a0f70cfcc8c3354eec1b6ed248bd59f05501f18507fd00e546d17f3925d277fdaaa0295ee51197017cf9512c7d5ca93d5cf504a866533b55347002bed2c7960ab2e9941b71a63903e35371e2fc41c6012effb99b9a2c0ff847f8458207f5a0c4803710b2856e75aef99192911d386ffd25c23825835f5cc649abd63f664be0a020e65737788dc2006144891d1e97e60200b2163e6a8b890693a87716b0126e5a',
  typeInt: 33,
  signatures: [
    Signature {
      R: '0xf70cfcc8c3354eec1b6ed248bd59f05501f18507fd00e546d17f3925d277fdaa',
      S: '0x295ee51197017cf9512c7d5ca93d5cf504a866533b55347002bed2c7960ab2e9',
      V: '0x7f5'
    }
  ],
  status: 'Submitted',
  transactionHash: '0x53fcc4efe8a7fb7b251233564043dd8c2fdedea7b7d42d750a1cc4aead208c11',
  accountKey: '0x04f84b02f848e301a103371334d038d983f3b560b2534385138ffaf69cf1aef039b268ef69c1736ec654e301a1031640a55aed2c871f8896a263b378ce73e323254de9173fd071bb29aa8d4c5285'
}
Copy
Copied
class FDTransactionResult {
    feePayer: 0x1b71a63903e35371e2fc41c6012effb99b9a2c0f
    from: 0xefbb861e098641550e5b1732454b1dd7ba008259
    gas: 1000000
    gasPrice: 0x5d21dba00
    input: null
    nonce: 0
    rlp: 0x21f9013b808505d21dba00830186a094efbb861e098641550e5b1732454b1dd7ba008259b87204f86f02f86ce302a102a9f0fbeab8c415e560c12266c51ecd90c71dd16ca97a99d3fd55f2eaf4698a1ae301a10332ac2fa7aa17035999f9dc2b151d9b551a85e4acb6c61e2e4905bafcf64b5fb2e301a1020f381470965e1c939e792b583ae221fd5fb7524c25bc07221e2a80f71431ed2af847f8458207f6a0d9272e8f511ffc30ebb77c968ca3fedc2a62e436fcdaba96c0d05cdbdeebda24a05cf0adb9b257a08ac2e3232b9943e60e5c3faf16c87f239258ed9ce199d64a36941b71a63903e35371e2fc41c6012effb99b9a2c0ff847f8458207f5a0ec3596ab6196a3fc5a027eea06758e9afa0a24b63c1aac06004afd377e878aaca00846ed9051ccf56b74317b855e225ff9ef89136557049fc6124f0f2f45459f74
    signatures: [class Signature {
        R: 0xd9272e8f511ffc30ebb77c968ca3fedc2a62e436fcdaba96c0d05cdbdeebda24
        S: 0x5cf0adb9b257a08ac2e3232b9943e60e5c3faf16c87f239258ed9ce199d64a36
        V: 0x7f6
    }]
    status: Submitted
    to: null
    transactionHash: 0x35cd6e962aacdde5b1188267f0fc81b31fdd42b9c9d9f7ee31f7b9ee82be6510
    typeInt: 33
    value: null
    feeRatio: null
    transactionId: null
    accountKey: 0x04f86f02f86ce302a102a9f0fbeab8c415e560c12266c51ecd90c71dd16ca97a99d3fd55f2eaf4698a1ae301a10332ac2fa7aa17035999f9dc2b151d9b551a85e4acb6c61e2e4905bafcf64b5fb2e301a1020f381470965e1c939e792b583ae221fd5fb7524c25bc07221e2a80f71431ed2a
}
info

typeInt 변수는 트랜잭션 종류를 구별하는 값입니다. 트랜잭션의 종류에 관한 자세한 내용은 다음을 확인하십시오.

이 API에 관한 자세한 내용은 다음을 확인하십시오.
이 문서 혹은 KAS에 관한 문의는 개발자 포럼을 방문해 도움 받으십시오.