# 계정 업데이트

## 튜토리얼에 앞서

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

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

| 항목                | 값                     | 비고                                                      |
| ----------------- | --------------------- | ------------------------------------------------------- |
| chain-id          | 8217 또는 1001          | Cypress(Klaytn 메인넷) 또는 Baobab(Klaytn 테스트넷)              |
| access-key-id     | 인증 아이디                | KAS 콘솔 - Security - Credential에서 발급받은 `accessKeyId`     |
| secret-access-key | 인증 비밀번호               | KAS 콘솔 - Security - Credential에서 발급받은 `secretAccessKey` |
| krn               | (optional) 계정 저장소의 ID | 기본 계정 저장소 사용 시 불필요                                      |

API 인증 키가 있으면 모든 KAS 서비스를 사용할 수 있으며 Wallet API를 호출해 만든 Klaytn 계정에 대한 모든 권한을 소유합니다. 모든 권한에는 Klaytn 계정의 자산(KLAY 등) 이동이나 [트랜잭션](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/tutorial/wallet-transaction-api) 전송 및 실행 권한이 포함됩니다. 만약 API 인증 키에 타인이 접근한다면 Klaytn 계정 권한을 탈취당해 원치 않는 트랜잭션이 발생할 수 있습니다.

{% hint style="danger" %}
KAS/Klaytn 계정 보안을 위해 KAS API 인증 키(Secret Access Key)를 타인과 함부로 공유하지 말고 주의해 관리하십시오.
{% endhint %}

## 클레이튼 계정 업데이트

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

{% hint style="info" %}
클레이튼 계정과 계정 키에 관한 자세한 내용은 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#klaytn-accounts)을 확인하십시오.
{% endhint %}

## 클레이튼 계정 키

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

{% hint style="info" %}
KAS에서도 [트랜잭션에 서명하는 API](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/wallet-account-api#tutorial-wallet-api-account-sign)를 제공합니다.
{% endhint %}

트랜잭션 서명에 사용하는 클레이튼 계정 키에는 크게 [일반적인 공개키](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeypublic), [다중 서명용 키](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeyweightedmultisig), [역할 기반 키](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeyrolebased)가 있습니다.

{% hint style="info" %}
클레이튼 키 타입(keyType)에 관한 자세한 내용은 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#account-key-type-id)을 확인하십시오.
{% endhint %}

## 계정 키를 다중 서명 키로 변경: 트랜잭션을 보내는 계정이 트랜잭션 전송 수수료를 부담하기 <a href="#tutorial-wallet-transaction-update" id="tutorial-wallet-transaction-update"></a>

클레이튼 계정 키를 다중 서명 키로 바꾸는 트랜잭션을 보냅니다. 여기서 소개하는 내용을 따르면 계정 키를 다중 서명 키 외에 다른 키로도 바꿀 수 있습니다. 클레이튼 계정 키 종류는 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#account-key)을 확인하십시오.

{% hint style="info" %}
여러분의 클레이튼 계정을 다중 서명 계정으로 업데이트하는 것은 여러분의 계정 키를 AccountKeyWeightedMultiSig로 업데이트 하는 것과 동일합니다.
{% endhint %}

{% hint style="warning" %}
다중 서명 키를 구성하는 각 키를 가지고 있는 계정들은 모두 같은 계정 저장소에 있어야 합니다.
{% endhint %}

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

{% hint style="info" %}
KAS SDK(caver-js/caver-java extension) 설치, 실행에 관한 자세한 내용은 [KAS SDK](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/sdk#kas-sdk)를 확인하십시오.\
계정 저장소 생성, 계정 생성, 계정 선택에 관한 자세한 내용은 [Getting Started](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/getting-started/account)를 확인하십시오.
{% endhint %}

### API 호출

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

{% tabs %}
{% tab title="curl" %}

```javascript
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
}"
```

{% endtab %}

{% tab title="javascript" %}

```javascript
// 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)
```

{% endtab %}

{% tab title="java" %}

```java
// 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);
```

{% endtab %}
{% endtabs %}

* `submit`: false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.

### API 응답

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

{% tabs %}
{% tab title="curl" %}

```javascript
{
  "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
}
```

{% endtab %}

{% tab title="javascript" %}

```javascript
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'
}
```

{% endtab %}

{% tab title="java" %}

```java
class TransactionResult {
    from: 0x50f7ec091d363f9180f95921cbb2ad98c09a0822
    gas: 100000
    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
}
```

{% endtab %}
{% endtabs %}

이 API에 관한 자세한 내용은 [다음](https://refs.klaytnapi.com/ko/wallet/latest#operation/AccountUpdateTransaction)을 확인하십시오.\
이 문서 혹은 KAS에 관한 문의는 [개발자 포럼](https://forum.klaytn.com/c/kas/kasko/26)을 방문해 도움을 받으십시오.

## 계정 키를 역할 기반 키로 변경: 수수료 대납 계정이 트랜잭션 전송 수수료를 부담하기 <a href="#tutorial-wallet-transaction-update-fd" id="tutorial-wallet-transaction-update-fd"></a>

클레이튼 계정 키를 역할 기반 키로 바꾸는 트랜잭션을 보냅니다. 여기서 소개하는 내용을 따르면 계정 키를 역할 기반 키 외에 다른 키로 바꿀 수 있으며 마찬가지로 수수료 대납 계정이 이 트랜잭션 수수료를 대납하게 할 수 있습니다. 클레이튼 계정 키 종류는 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#account-key)을 확인하십시오.

{% hint style="info" %}
여러분의 클레이튼 계정을 역할 기반 계정으로 업데이트하는 것은 여러분의 계정 키를 AccountKeyRoleBased로 업데이트 하는 것과 동일합니다.
{% endhint %}

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

이 예시를 따라 계정 업데이트 트랜잭션을 보내면, 보내는 계정(Account)이 아니라 다른 계정(여러분의 수수료 대납 계정)이 이 트랜잭션 수수료를 대신 부담합니다. KAS에서 제공하는 수수료 대납 방식에 관한 자세한 내용은 [다음](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/basics/api#basics-api-fd)을 확인하십시오.

{% hint style="info" %}
KAS SDK(caver-js/caver-java extension) 설치, 실행에 관한 자세한 내용은 [KAS SDK](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/sdk#kas-sdk)를 확인하십시오.\
계정 저장소 생성, 계정 생성, 계정 선택에 관한 자세한 내용은 [Getting Started](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/getting-started/account)를 확인하십시오.\
수수료 대납 계정 저장소 생성, FeePayerAccount 생성, FeePayerAccount 선택에 관한 자세한 내용은 [Getting Started](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/getting-started/account#getting-started-account-createfp)를 확인하십시오.
{% endhint %}

### API 호출

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

{% hint style="info" %}
클레이튼 키 타입(keyType)에 관한 자세한 내용은 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#account-key-type-id)을 확인하십시오.
{% endhint %}

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

{% hint style="info" %}
계정 키를 역할 기반 키로 바꿀 때 특정 역할을 배제하고 싶다면, 배제하려는 역할 키에는 keyType=3([AccountKeyFail](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeyfail))을 입력하십시오.
{% endhint %}

{% hint style="info" %}
계정 키를 역할 기반 키로 바꿀 때 특정 역할만 업데이트하고 싶다면, 업데이트하고 싶지 않은 역할 키에는 keyType=128([AccountKeyNil](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeynil))을 입력하십시오.
{% endhint %}

{% tabs %}
{% tab title="curl" %}

```javascript
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
}"
```

{% endtab %}

{% tab title="javascript" %}

```javascript
// 각 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)
```

{% endtab %}

{% tab title="java" %}

```java
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);
```

{% endtab %}
{% endtabs %}

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

### API 응답

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

{% tabs %}
{% tab title="curl" %}

```javascript
{
  "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
}
```

{% endtab %}

{% tab title="javascript" %}

```javascript
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'
}
```

{% endtab %}

{% tab title="java" %}

```java
class FDTransactionResult {
    feePayer: 0x31d845ac80a0b2a38f6267cabcf34f8fa9dcd2b7
    from: 0xdd9f780ef810138a9625071b45211b00a76c9c43
    gas: 100000
    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
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
`typeInt` 변수는 트랜잭션 종류를 구별하는 값입니다. 트랜잭션의 종류에 관한 자세한 내용은 [다음](https://ko.docs.klaytn.com/klaytn/design/transactions/basic#txtypelegacytransaction)을 확인하십시오.
{% endhint %}

이 API에 관한 자세한 내용은 [다음](https://refs.klaytnapi.com/ko/wallet/latest#operation/UFDAccountUpdateTransaction)을 확인하십시오.\
이 문서 혹은 KAS에 관한 문의는 [개발자 포럼](https://forum.klaytn.com/c/kas/kasko/26)을 방문해 도움을 받으십시오.

## 계정 키를 역할 기반 키로 변경: KAS에서 트랜잭션 전송 수수료를 부담하기 <a href="#tutorial-wallet-transaction-update-fd" id="tutorial-wallet-transaction-update-fd"></a>

클레이튼 계정 키를 역할 기반 키로 바꾸는 트랜잭션을 보냅니다. 여기서 소개하는 내용을 따르면 계정 키를 역할 기반 키 외에 다른 키로 바꿀 수 있으며 마찬가지로 수수료 대납 계정이 이 트랜잭션 수수료를 대납하게 할 수 있습니다. 클레이튼 계정 키 종류는 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#account-key)을 확인하십시오.

{% hint style="info" %}
여러분의 클레이튼 계정을 역할 기반 계정으로 업데이트하는 것은 여러분의 계정 키를 AccountKeyRoleBased로 업데이트 하는 것과 동일합니다.
{% endhint %}

KAS로 계정 업데이트 트랜잭션을 전송하려면 Klaytn Node에 트랜잭션을 보내야 하며, 트랜잭션을 보내려면 트랜잭션 수수료를 지불해야 합니다. API를 호출하려면 계정 저장소에 계정을 생성하고 사용할 계정을 선택해야 합니다. 이 예시를 따라 Klay를 보내면, KLAY를 보내는 계정(Account)이 아니라 다른 계정(KAS의 글로벌 수수료 대납 계정)이 이 트랜잭션 수수료를 대신 부담합니다. KAS 글로벌 수수료 대납 계정(KAS GlobalFeePayer)이 트랜잭션을 전송하는 클레이튼 계정을 대신해 부담한 수수료는 추후 여러분의 KAS 계정에 청구됩니다. KAS에서 제공하는 수수료 대납 방식에 관한 자세한 내용은 [다음](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/basics/api#basics-api-fd)을 확인하십시오.

{% hint style="info" %}
KAS SDK(caver-js/caver-java extension) 설치, 실행에 관한 자세한 내용은 [KAS SDK](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/sdk#kas-sdk)를 확인하십시오.\
계정 저장소 생성, 계정 생성, 계정 선택에 관한 자세한 내용은 [Getting Started](https://ground-x.gitbook.io/kas-docs-dev/gitbook-multiaction-project/getting-started/account)를 확인하십시오.
{% endhint %}

### API 호출

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

{% hint style="info" %}
클레이튼 키 타입(keyType)에 관한 자세한 내용은 [다음](https://ko.docs.klaytn.com/klaytn/design/accounts#account-key-type-id)을 확인하십시오.
{% endhint %}

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

{% hint style="info" %}
계정 키를 역할 기반 키로 바꿀 때 특정 역할을 배제하고 싶다면, 배제하려는 역할 키에는 keyType=3([AccountKeyFail](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeyfail))을 입력하십시오.
{% endhint %}

{% hint style="info" %}
계정 키를 역할 기반 키로 바꿀 때 특정 역할만 업데이트하고 싶다면, 업데이트하고 싶지 않은 역할 키에는 keyType=128([AccountKeyNil](https://ko.docs.klaytn.com/klaytn/design/accounts#accountkeynil))을 입력하십시오.
{% endhint %}

{% tabs %}
{% tab title="curl" %}

```javascript
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
}"
```

{% endtab %}

{% tab title="javascript" %}

```javascript
// 각 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)
```

{% endtab %}

{% tab title="java" %}

```java
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);
```

{% endtab %}
{% endtabs %}

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

### API 응답

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

{% tabs %}
{% tab title="curl" %}

```javascript
{
  "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
}
```

{% endtab %}

{% tab title="javascript" %}

```javascript
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'
}
```

{% endtab %}

{% tab title="java" %}

```java
class FDTransactionResult {
    feePayer: 0x1b71a63903e35371e2fc41c6012effb99b9a2c0f
    from: 0xefbb861e098641550e5b1732454b1dd7ba008259
    gas: 100000
    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
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
`typeInt` 변수는 트랜잭션 종류를 구별하는 값입니다. 트랜잭션의 종류에 관한 자세한 내용은 [다음](https://ko.docs.klaytn.com/klaytn/design/transactions/basic#txtypelegacytransaction)을 확인하십시오.
{% endhint %}

이 API에 관한 자세한 내용은 [다음](https://refs.klaytnapi.com/ko/wallet/latest#operation/UFDAccountUpdateTransaction)을 확인하십시오.\
이 문서 혹은 KAS에 관한 문의는 [개발자 포럼](https://forum.klaytn.com/c/kas/kasko/26)을 방문해 도움을 받으십시오.
