# Value Transfer Memo

## sendTransaction (VALUE\_TRANSFER\_MEMO) <a href="#sendtransaction-value_transfer_memo" id="sendtransaction-value_transfer_memo"></a>

```javascript
caver.klay.sendTransaction(transactionObject [, callback])
```

[Value Transfer Memo](https://archive-ko.docs.klaytn.foundation/klaytn/design/transactions/basic#txtypevaluetransfermemo) 트랜잭션을 네트워크에 전송합니다.

**Parameters**

The parameters of sendTransaction are a transaction object and a callback function.

| Name              | Type     | Description                                                                                                |
| ----------------- | -------- | ---------------------------------------------------------------------------------------------------------- |
| transactionObject | Object   | The transaction object to send.                                                                            |
| callback          | Function | (optional) Optional callback, returns an error object as the first parameter and the result as the second. |

`VALUE_TRANSFER_MEMO` 유형의 트랜잭션 오브젝트의 구조는 다음과 같습니다.

| Name     | Type                                | Description                                                                                                                |
| -------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| type     | String                              | Transaction Type. "VALUE\_TRANSFER\_MEMO"                                                                                  |
| from     | String                              | Address of this transaction sender.                                                                                        |
| to       | String                              | The destination address of the transaction.                                                                                |
| value    | Number \| String \| BN \| BigNumber | The value transferred for the transaction in peb.                                                                          |
| data     | String                              | 함께 보낼 메시지.                                                                                                                 |
| gas      | Number                              | The maximum amount of gas willing to pay for the transaction (unused gas is refunded).                                     |
| gasPrice | Number                              | (optional) Gas price provided by the sender in peb. The gasPrice must be the same as the unitPrice set in the Klaytn node. |
| nonce    | Number                              | (optional) Integer of a nonce. If omitted, it will be set by caver-js via calling `caver.klay.getTransactionCount`.        |

**Return Value**

The `callback` will return the 32-byte transaction hash.

`PromiEvent`: A promise combined event emitter. Will be resolved when the transaction receipt is available. Additionally the following events are available:

* `"transactionHash"` returns `String`: Is fired right after the transaction is sent and a transaction hash is available.
* `"receipt"` returns `Object`: Is fired when the transaction receipt is available.
* `"error"` returns `Error`: Is fired if an error occurs during sending. On an out-of-gas error, the second parameter is the receipt.

**Example**

```javascript
const account = caver.klay.accounts.wallet.add('0x{private key}')

// using the promise
caver.klay.sendTransaction({
    type: 'VALUE_TRANSFER_MEMO',
    from: account.address,
    to: '0x75c3098Be5E4B63FBAc05838DaAEE378dD48098d',
    gas: '300000',
    value: caver.utils.toPeb('1', 'KLAY'),
    data: '0x68656c6c6f',
});
.then(function(receipt){
    ...
});

// using the event emitter
caver.klay.sendTransaction({
    type: 'VALUE_TRANSFER_MEMO',
    from: account.address,
    to: '0x75c3098Be5E4B63FBAc05838DaAEE378dD48098d',
    gas: '300000',
    value: caver.utils.toPeb('1', 'KLAY'),
    data: '0x68656c6c6f',
});
.on('transactionHash', function(hash){
    ...
})
.on('receipt', function(receipt){
    ...
})
.on('error', console.error); // If an out-of-gas error, the second parameter is the receipt.
```

## sendTransaction (FEE\_DELEGATED\_VALUE\_TRANSFER\_MEMO) <a href="#sendtransaction-fee_delegated_value_transfer_memo" id="sendtransaction-fee_delegated_value_transfer_memo"></a>

```javascript
caver.klay.sendTransaction(transactionObject [, callback])
```

[Fee Delegated Value Transfer Memo](https://archive-ko.docs.klaytn.foundation/klaytn/design/transactions/fee-delegation#txtypefeedelegatedvaluetransfermemo) 트랜잭션을 네트워크에 전송합니다.

**Parameters**

The parameters of sendTransaction are a transaction object and a callback function.

| Name              | Type     | Description                                                                                                |
| ----------------- | -------- | ---------------------------------------------------------------------------------------------------------- |
| transactionObject | Object   | The transaction object to send.                                                                            |
| callback          | Function | (optional) Optional callback, returns an error object as the first parameter and the result as the second. |

`FEE_DELEGATED_VALUE_TRANSFER_MEMO` 트랜잭션 객체의 구조는 다음과 같습니다.

| Name     | Type                                | Description                                                                                                                |
| -------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| type     | String                              | Transaction Type. "FEE\_DELEGATED\_VALUE\_TRANSFER\_MEMO"                                                                  |
| from     | String                              | Address of this transaction sender.                                                                                        |
| to       | String                              | The destination address of the transaction.                                                                                |
| value    | Number \| String \| BN \| BigNumber | The value transferred for the transaction in peb.                                                                          |
| data     | String                              | The message to send with.                                                                                                  |
| gas      | Number                              | The maximum amount of gas willing to pay for the transaction (unused gas is refunded).                                     |
| gasPrice | Number                              | (optional) Gas price provided by the sender in peb. The gasPrice must be the same as the unitPrice set in the Klaytn node. |
| nonce    | Number                              | (optional) Integer of a nonce. If omitted, it will be set by caver-js via calling `caver.klay.getTransactionCount`.        |

위의 구조를 가진 `FEE_DELEGATED_VALUE_TRANSFER_MEMO` 유형의 트랜잭션 오브젝트, 또는 `FEE_DELEGATED_VALUE_TRANSFER_MEMO` 유형의 `RLP 인코딩된 트랜잭션`은 트랜잭션 발신자의 경우 [caver.klay.accounts.signTransaction](https://archive-ko.docs.klaytn.foundation/content/dapp/sdk/caver-js/v1.4.1/caver.klay.accounts#signtransaction)의 매개 변수로, 수수료 납부자의 경우 [caver.klay.accounts.feePayerSignTransaction](https://archive-ko.docs.klaytn.foundation/content/dapp/sdk/caver-js/v1.4.1/caver.klay.accounts#feepayersigntransaction)의 매개 변수로 사용할 수 있습니다.

In order for the fee payer to sign an RLP encoded transaction signed by the sender and send it to the network, define an object with the following structure and call `caver.klay.sendTransaction`.

| Name                 | Type   | Description                                   |
| -------------------- | ------ | --------------------------------------------- |
| feePayer             | String | The fee payer address of the transaction.     |
| senderRawTransaction | String | The RLP-encoded transaction signed by sender. |

**Return Value**

The `callback` will return the 32-byte transaction hash.

`PromiEvent`: A promise combined event emitter. Will be resolved when the transaction receipt is available. Additionally the following events are available:

* `"transactionHash"` returns `String`: Is fired right after the transaction is sent and a transaction hash is available.
* `"receipt"` returns `Object`: Is fired when the transaction receipt is available.
* `"error"` returns `Error`: Is fired if an error occurs during sending. On an out-of-gas error, the second parameter is the receipt.

**Example**

```javascript
const sender = caver.klay.accounts.wallet.add('0x{private key}')
const feePayer = caver.klay.accounts.wallet.add('0x{private key}')

// using the promise
const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction({
  type: 'FEE_DELEGATED_VALUE_TRANSFER_MEMO',
  from: sender.address,
  to: '0x75c3098Be5E4B63FBAc05838DaAEE378dD48098d',
  gas: '300000',
  value: caver.utils.toPeb('1', 'KLAY'),
  data: '0x68656c6c6f',
}, sender.privateKey)

caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: feePayer.address,
})
.then(function(receipt){
    ...
});

// using the event emitter
const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction({
  type: 'FEE_DELEGATED_VALUE_TRANSFER_MEMO',
  from: sender.address,
  to: '0x75c3098Be5E4B63FBAc05838DaAEE378dD48098d',
  gas: '300000',
  value: caver.utils.toPeb('1', 'KLAY'),
  data: '0x68656c6c6f',
}, sender.privateKey)

caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: feePayer.address,
})
.on('transactionHash', function(hash){
    ...
})
.on('receipt', function(receipt){
    ...
})
.on('error', console.error); // If an out-of-gas error, the second parameter is the receipt.
```

## sendTransaction (FEE\_DELEGATED\_VALUE\_TRANSFER\_MEMO\_WITH\_RATIO) <a href="#sendtransaction-fee_delegated_value_transfer_memo_with_ratio" id="sendtransaction-fee_delegated_value_transfer_memo_with_ratio"></a>

```javascript
caver.klay.sendTransaction(transactionObject [, callback])
```

[Fee Delegated Value Transfer Memo With Ratio](https://archive-ko.docs.klaytn.foundation/klaytn/design/transactions/partial-fee-delegation#txtypefeedelegatedvaluetransfermemowithratio) 트랜잭션을 네트워크에 전송합니다.

**Parameters**

The parameters of sendTransaction are a transaction object and a callback function.

| Name              | Type     | Description                                                                                                |
| ----------------- | -------- | ---------------------------------------------------------------------------------------------------------- |
| transactionObject | Object   | The transaction object to send.                                                                            |
| callback          | Function | (optional) Optional callback, returns an error object as the first parameter and the result as the second. |

`FEE_DELEGATED_VALUE_TRANSFER_MEMO_WITH_RATIO` 트랜잭션 객체의 구조는 다음과 같습니다.

| Name     | Type                                | Description                                                                                                                                                                                                            |
| -------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| type     | String                              | Transaction Type. "FEE\_DELEGATED\_VALUE\_TRANSFER\_MEMO\_WITH\_RATIO"                                                                                                                                                 |
| from     | String                              | Address of this transaction sender.                                                                                                                                                                                    |
| to       | String                              | The destination address of the transaction.                                                                                                                                                                            |
| value    | Number \| String \| BN \| BigNumber | The value transferred for the transaction in peb.                                                                                                                                                                      |
| data     | String                              | The message to send with.                                                                                                                                                                                              |
| gas      | Number                              | The maximum amount of gas willing to pay for the transaction (unused gas is refunded).                                                                                                                                 |
| gasPrice | Number                              | (optional) Gas price provided by the sender in peb. The gasPrice must be the same as the unitPrice set in the Klaytn node.                                                                                             |
| nonce    | Number                              | (optional) Integer of a nonce. If omitted, it will be set by caver-js via calling `caver.klay.getTransactionCount`.                                                                                                    |
| feeRatio | Number                              | Fee ratio of the fee payer. If it is 30, 30% of the fee will be paid by the fee payer. 70% will be paid by the sender. The range of fee ratio is 1 \~ 99, if it is out of range, the transaction will not be accepted. |

위의 구조를 가진 `FEE_DELEGATED_VALUE_TRANSFER_MEMO_WITH_RATIO` 유형의 트랜잭션 오브젝트, 또는 `FEE_DELEGATED_VALUE_TRANSFER_MEMO_WITH_RATIO` 유형의 `RLP 인코딩된 트랜잭션`은 트랜잭션 발신자의 경우 [caver.klay.accounts.signTransaction](https://archive-ko.docs.klaytn.foundation/content/dapp/sdk/caver-js/v1.4.1/caver.klay.accounts#signtransaction)의 매개 변수로, 수수료 납부자의 경우 [caver.klay.accounts.feePayerSignTransaction](https://archive-ko.docs.klaytn.foundation/content/dapp/sdk/caver-js/v1.4.1/caver.klay.accounts#feepayersigntransaction)의 매개 변수로 사용할 수 있습니다.

In order for the fee payer to sign an RLP encoded transaction signed by the sender and send it to the network, define an object with the following structure and call `caver.klay.sendTransaction`.

| Name                 | Type   | Description                                   |
| -------------------- | ------ | --------------------------------------------- |
| feePayer             | String | The fee payer address of the transaction.     |
| senderRawTransaction | String | The RLP-encoded transaction signed by sender. |

**Return Value**

The `callback` will return the 32-byte transaction hash.

`PromiEvent`: A promise combined event emitter. Will be resolved when the transaction receipt is available. Additionally the following events are available:

* `"transactionHash"` returns `String`: Is fired right after the transaction is sent and a transaction hash is available.
* `"receipt"` returns `Object`: Is fired when the transaction receipt is available.
* `"error"` returns `Error`: Is fired if an error occurs during sending. On an out-of-gas error, the second parameter is the receipt.

**Example**

```javascript
const sender = caver.klay.accounts.wallet.add('0x{private key}')
const feePayer = caver.klay.accounts.wallet.add('0x{private key}')

// using the promise
const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction({
  type: 'FEE_DELEGATED_VALUE_TRANSFER_MEMO_WITH_RATIO',
  from: sender.address,
  to: '0x75c3098Be5E4B63FBAc05838DaAEE378dD48098d',
  gas: '300000',
  feeRatio: 20,
  data: '0x68656c6c6f',
  value: caver.utils.toPeb('1', 'KLAY'),
}, sender.privateKey)

caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: feePayer.address,
})
.then(function(receipt){
    ...
});

// using the event emitter
const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction({
  type: 'FEE_DELEGATED_VALUE_TRANSFER_MEMO_WITH_RATIO',
  from: sender.address,
  to: '0x75c3098Be5E4B63FBAc05838DaAEE378dD48098d',
  gas: '300000',
  feeRatio: 20,
  data: '0x68656c6c6f',
  value: caver.utils.toPeb('1', 'KLAY'),
}, sender.privateKey)

caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: feePayer.address,
})
.on('transactionHash', function(hash){
    ...
})
.on('receipt', function(receipt){
    ...
})
.on('error', console.error); // If an out-of-gas error, the second parameter is the receipt.
```
