diff --git a/src/main/java/io/blk/erc20/ContractService.java b/src/main/java/io/blk/erc20/ContractService.java index 67f2a67..dfc7865 100644 --- a/src/main/java/io/blk/erc20/ContractService.java +++ b/src/main/java/io/blk/erc20/ContractService.java @@ -58,7 +58,7 @@ public String deploy( } public String name(String contractAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return humanStandardToken.name().send(); } catch (InterruptedException | ExecutionException e) { @@ -67,8 +67,8 @@ public String name(String contractAddress) throws Exception { } public TransactionResponse approve( - List privateFor, String contractAddress, String spender, BigInteger value) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress, privateFor); + List privateFor, String contractAddress, String spender, BigInteger value, String ownerAddress) throws Exception { + HumanStandardToken humanStandardToken = load(contractAddress, privateFor,ownerAddress,true); try { TransactionReceipt transactionReceipt = humanStandardToken .approve(spender, value).send(); @@ -79,7 +79,7 @@ public TransactionResponse approve( } public long totalSupply(String contractAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return extractLongValue(humanStandardToken.totalSupply().send()); } catch (InterruptedException | ExecutionException e) { @@ -89,7 +89,7 @@ public long totalSupply(String contractAddress) throws Exception { public TransactionResponse transferFrom( List privateFor, String contractAddress, String from, String to, BigInteger value) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress, privateFor); + HumanStandardToken humanStandardToken = load(contractAddress, privateFor,"",false); try { TransactionReceipt transactionReceipt = humanStandardToken .transferFrom(from, to, value).send(); @@ -100,7 +100,7 @@ public TransactionResponse transferFrom( } public long decimals(String contractAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return extractLongValue(humanStandardToken.decimals().send()); } catch (InterruptedException | ExecutionException e) { @@ -109,7 +109,7 @@ public long decimals(String contractAddress) throws Exception { } public String version(String contractAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return humanStandardToken.version().send(); } catch (InterruptedException | ExecutionException e) { @@ -118,7 +118,7 @@ public String version(String contractAddress) throws Exception { } public long balanceOf(String contractAddress, String ownerAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return extractLongValue(humanStandardToken.balanceOf(ownerAddress).send()); } catch (InterruptedException | ExecutionException e) { @@ -127,7 +127,7 @@ public long balanceOf(String contractAddress, String ownerAddress) throws Except } public String symbol(String contractAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return humanStandardToken.symbol().send(); } catch (InterruptedException | ExecutionException e) { @@ -136,8 +136,8 @@ public String symbol(String contractAddress) throws Exception { } public TransactionResponse transfer( - List privateFor, String contractAddress, String to, BigInteger value) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress, privateFor); + List privateFor, String contractAddress, String to, BigInteger value, String fromAddress) throws Exception { + HumanStandardToken humanStandardToken = load(contractAddress, privateFor,fromAddress,true); try { TransactionReceipt transactionReceipt = humanStandardToken .transfer(to, value).send(); @@ -150,7 +150,7 @@ public TransactionResponse transfer( public TransactionResponse approveAndCall( List privateFor, String contractAddress, String spender, BigInteger value, String extraData) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress, privateFor); + HumanStandardToken humanStandardToken = load(contractAddress, privateFor,"",false); try { TransactionReceipt transactionReceipt = humanStandardToken .approveAndCall( @@ -164,7 +164,7 @@ public TransactionResponse approveAndCall( } public long allowance(String contractAddress, String ownerAddress, String spenderAddress) throws Exception { - HumanStandardToken humanStandardToken = load(contractAddress); + HumanStandardToken humanStandardToken = load(contractAddress,"",false); try { return extractLongValue(humanStandardToken.allowance( ownerAddress, spenderAddress) @@ -174,16 +174,28 @@ public long allowance(String contractAddress, String ownerAddress, String spende } } - private HumanStandardToken load(String contractAddress, List privateFor) { - TransactionManager transactionManager = new ClientTransactionManager( - quorum, nodeConfiguration.getFromAddress(), privateFor); + private HumanStandardToken load(String contractAddress, List privateFor, String fromAddress, boolean withFromAddress) { + TransactionManager transactionManager = null; + if(withFromAddress){ + transactionManager = new ClientTransactionManager( + quorum, fromAddress, privateFor); + }else{ + transactionManager = new ClientTransactionManager( + quorum, nodeConfiguration.getFromAddress(), privateFor); + } return HumanStandardToken.load( contractAddress, quorum, transactionManager, GAS_PRICE, GAS_LIMIT); } - private HumanStandardToken load(String contractAddress) { - TransactionManager transactionManager = new ClientTransactionManager( - quorum, nodeConfiguration.getFromAddress(), Collections.emptyList()); + private HumanStandardToken load(String contractAddress,String fromAddress, boolean withFromAddress ) { + TransactionManager transactionManager = null; + if(withFromAddress){ + transactionManager = new ClientTransactionManager( + quorum, fromAddress, Collections.emptyList()); + }else{ + transactionManager = new ClientTransactionManager( + quorum, nodeConfiguration.getFromAddress(), Collections.emptyList()); + } return HumanStandardToken.load( contractAddress, quorum, transactionManager, GAS_PRICE, GAS_LIMIT); } diff --git a/src/main/java/io/blk/erc20/Controller.java b/src/main/java/io/blk/erc20/Controller.java index 1ff0037..be70368 100644 --- a/src/main/java/io/blk/erc20/Controller.java +++ b/src/main/java/io/blk/erc20/Controller.java @@ -84,7 +84,8 @@ TransactionResponse approve( extractPrivateFor(request), contractAddress, approveRequest.getSpender(), - approveRequest.getValue()); + approveRequest.getValue(), + approveRequest.getOwner()); } @ApiOperation("Get total supply of tokens") @@ -158,7 +159,8 @@ TransactionResponse transfer( extractPrivateFor(request), contractAddress, transferRequest.getTo(), - transferRequest.getValue()); + transferRequest.getValue(), + transferRequest.getFrom()); } @ApiOperation( @@ -214,6 +216,7 @@ static class ContractSpecification { static class ApproveRequest { private final String spender; private final BigInteger value; + private final String owner; } @Data @@ -227,6 +230,7 @@ static class TransferFromRequest { static class TransferRequest { private final String to; private final BigInteger value; + private final String from; } @Data