Skip to content

Instantly share code, notes, and snippets.

@w3kim
Created January 10, 2020 08:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save w3kim/0f69d97996b791393a626912dfdb2dbe to your computer and use it in GitHub Desktop.
Save w3kim/0f69d97996b791393a626912dfdb2dbe to your computer and use it in GitHub Desktop.
Demonstrating fee delegated value transfer using caver-java 1.3.0
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