Smart Contract
Smart contract is a key feature of WELUPS network. It’s easy to creating and interacting with smart contracts through Welups SDK.
There are two types of smart contract calls: const call and trigger call.
Simply, a const call returns result immediately once and no need to sign or broadcast.
Trigger call is a type of system contract call, needs signing and broadcasting. It fetches the result through the API.
You may see the functions of a specified contract by
ContractFunction.toString()
, then you can construct a Function
object to make a constant/trigger call.Get a Contract object from the address.
PARAMS
1. contractAddress(String)
The address of a smart contract.
RETURN
A Contract object.
THROW
Throws if the given contract address does not match any.
Example :
public void getSmartContract() {
try {
WelClient client = new WelClient("172.104.51.182:16669","172.104.51.182:16669","private key");
Contract cntr = client.getContract("WV27cVbuGmTv9q6qgtPxsLUkuG9ohUUVPd"); //JST
for (ContractFunction cf : cntr.getFunctions()) {
System.out.println(cf.toString());
}
} catch (Exception e) {
System.out.println("error: " + e);
}
}
The result is:
Contract name: WRC721Token
cntr.getOriginAddr()
<[email protected] size=21 contents="AB\[email protected]\311\373\372\255\337\342\240\020\255\v\315\260">
Contract functions: []
Make a trigger call. Trigger calls require signature and broadcasting. Refer to RPC_APIs for the signing and broadcasting functions.
The first half of the trigger call process is similar to the const call.
You can easily set feeLimit,
memo
and other common attributes via the TransactionBuilderPARAMS
1. ownerAddr(String)*
The caller’s address.
2. contractAddr(String)*
The contract’s address.
3. function(Function)*
The exact function you are calling, you can find the example in the
triggerCallDemo
.RETURN
A TransactionBuilder object, for easily setting memos, feelimit, Etc.
THROW
Throws if the function does not match any in the smart contract.
Example:
publ public void triggerCallDemo() {
WelClient client = new WelClient("172.104.51.182:16669","172.104.51.182:16669","private key");
try {
//function 'setApprovalForAll'
//params: function name, function params
Function wrc721Transfer = new Function("setApprovalForAll",
Arrays.asList(new Address("41a9c46373aEB4749E3CE45acA242b027A46f486f9"),
new Bool(false)),
Arrays.asList(new TypeReference<Bool>() {}));
//the params are: owner address, contract address, function
TransactionBuilder builder = client.triggerCall("414203485a535a4072C9FBFaADDfe2A010AD0BcdB0", "WV27cVbuGmTv9q6qgtPxsLUkuG9ohUUVPd", wrc721Transfer); //JST
//set extra params
builder.setFeeLimit(100000000L);
builder.setMemo("Let's go!");
//sign transaction
Transaction signedTxn = client.signTransaction(builder.build());
System.out.println(signedTxn.toString());
//broadcast transaction
String ret = client.broadcastTransaction(signedTxn);
System.out.println("======== Result ========\n" + ret);
} catch (Exception e) {
System.out.println("error: " + e);
}
}
======== Result ======== 0d2b6a4a7d52e0775da63443e285010441ab9490cf57c47c097ff85b79aff3e0
Make a constant call, without broadcasting.
PARAMS
1. ownerAddr(String)*
The caller’s address.
2. contractAddr(String)*
The contract’s address.
3. function(Function)*
The exact function you are calling, you can find the example in the
triggerCallDemo
.RETURN
A TransactionExtention object
THROW
Throws if the function does not match any in the smart contract.
Last modified 1yr ago