Created
January 10, 2020 08:23
-
-
Save w3kim/0f69d97996b791393a626912dfdb2dbe to your computer and use it in GitHub Desktop.
Demonstrating fee delegated value transfer using caver-java 1.3.0
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.klaytn.example.caver; | |
import com.klaytn.caver.Caver; | |
import com.klaytn.caver.crypto.KlayCredentials; | |
import com.klaytn.caver.fee.FeePayerManager; | |
import com.klaytn.caver.methods.response.KlayTransactionReceipt; | |
import com.klaytn.caver.tx.manager.PollingTransactionReceiptProcessor; | |
import com.klaytn.caver.tx.type.TxTypeFeeDelegatedValueTransfer; | |
import com.klaytn.caver.utils.ChainId; | |
import org.junit.Assert; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import org.web3j.protocol.core.DefaultBlockParameter; | |
import org.web3j.protocol.core.DefaultBlockParameterName; | |
import java.io.IOException; | |
import java.math.BigInteger; | |
/** | |
* This test is designed to test fee delegated value transfer using caver-java 1.3.0. | |
*/ | |
public class FeeDelegatedValueTransfer { | |
private static final Logger log = LoggerFactory.getLogger(FeeDelegatedTxExample.class.getSimpleName()); | |
private static final BigInteger GAS_LIMIT = BigInteger.valueOf(3000000L); | |
private static final BigInteger GAS_PRICE = BigInteger.valueOf(25000000000L); | |
private static DefaultBlockParameter BLK_PARAM = DefaultBlockParameterName.LATEST; | |
private static int CHAIN_ID; | |
private static Caver caver; | |
private static KlayCredentials senderCredential; | |
private static KlayCredentials payerCredential; | |
private static KlayCredentials recipientCredential; | |
@BeforeClass | |
public static void setup() { | |
// Baobab setting | |
CHAIN_ID = ChainId.BAOBAB_TESTNET; | |
caver = Caver.build("https://api.baobab.klaytn.net:8651/"); | |
senderCredential = KlayCredentials.create("0x50ad35e4e5634186ee9a8488a238e17101a8e28c4224d42b37a4baadef77d91d"); | |
payerCredential = KlayCredentials.create("0x0b558c777ae277057b964f8adbd0be08deed21d81d59793cde065041be6b2923"); | |
recipientCredential = KlayCredentials.create("0xdf1424179fd2f3cceaf4f1c11959f10b7c88646a1f77cbf07a551a504bc07e32"); | |
} | |
@Test | |
public void feeDelegatedValueTransferTest() throws IOException { | |
BigInteger senderBalance = caver.klay().getBalance(senderCredential.getAddress(), BLK_PARAM).send().getValue(); | |
BigInteger payerBalance = caver.klay().getBalance(payerCredential.getAddress(), BLK_PARAM).send().getValue(); | |
BigInteger recipientBalance = caver.klay().getBalance(recipientCredential.getAddress(), BLK_PARAM).send().getValue(); | |
log.info("sender.balance\t=\t{}", senderBalance); | |
log.info("payer.balance\t=\t{}", payerBalance); | |
log.info("recipient.balance\t=\t{}", recipientBalance); | |
System.out.println(senderCredential.getAddress()); | |
System.out.println(payerCredential.getAddress()); | |
BigInteger nonce = caver.klay().getTransactionCount(senderCredential.getAddress(), BLK_PARAM).send().getValue(); | |
TxTypeFeeDelegatedValueTransfer tx = TxTypeFeeDelegatedValueTransfer | |
.createTransaction(nonce, GAS_PRICE, GAS_LIMIT, recipientCredential.getAddress(), BigInteger.ONE, senderCredential.getAddress()); | |
String rawTx = tx.sign(senderCredential, CHAIN_ID).getValueAsString(); | |
System.out.println(">>> sender raw TX: " + rawTx); | |
FeePayerManager feePayerManager = new FeePayerManager.Builder(caver, payerCredential) | |
.setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caver, 1000, 10)) | |
.setChainId(CHAIN_ID) | |
.build(); | |
System.out.println(">>> Sending TX"); | |
KlayTransactionReceipt.TransactionReceipt transactionReceipt = feePayerManager.executeTransaction(rawTx); | |
Assert.assertEquals(1, Integer.decode(transactionReceipt.getStatus()).intValue()); // status should be 0x1 if succeeded | |
BigInteger senderBalance2 = caver.klay().getBalance(senderCredential.getAddress(), BLK_PARAM).send().getValue(); | |
BigInteger payerBalance2 = caver.klay().getBalance(payerCredential.getAddress(), BLK_PARAM).send().getValue(); | |
BigInteger recipientBalance2 = caver.klay().getBalance(recipientCredential.getAddress(), BLK_PARAM).send().getValue(); | |
log.info("sender.balance\t=\t{}", senderBalance2); | |
log.info("payer.balance\t=\t{}", payerBalance2); | |
log.info("recipient.balance\t=\t{}", recipientBalance2); | |
Assert.assertEquals(-1, senderBalance2.subtract(senderBalance).intValue()); | |
Assert.assertEquals(1, recipientBalance2.subtract(recipientBalance).intValue()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment