ContractMatching
type
String
yes
The value is "ContractMatching"
accountId
yes
The account id
subAccountId
yes
The subaccount id
maker
Array of Contracts
yes
The maker list
taker
Contract
yes
The taker
fee
yes
The fee amount of ContractMatching
feeToken
yes
The token id of the fee
signature
yes
the pub key hash corresponding to the signature must be aligned with the account
where the Contract
is the order in perpetual contract
accountId
account id
subAccountId
sub account id
slotId
slot id
nonce
Nonce
slot nonce, Value range: [0, 2^24 - 1]
pairId
the pair id
size
position size
price
price, the value can't be zero
direction
u8
1: long, 0: short
feeRates
[u8, u8]
The fee rates of [maker, taker], 100 means 1.00%, max is 2.56%
hasSubsidy
u8
1: true, 0: false, if the maker has subsidy, the submitter will give maker subsidy
signature
ZkLink L3 signature
For example:
{
"type": "ContractMatching",
"accountId": 0,
"subAccountId": 0,
"maker": [
{
"accountId": 0,
"subAccountId": 0,
"slotId": 0,
"nonce": 0,
"pairId": 0,
"size": "0",
"price": "0",
"direction": 0,
"feeRates": [
0,
0
],
"hasSubsidy": 0,
"signature": {
"pubKey": "0x99575738f142a942df9db99d27bd4ceeb8f4e75f9444b4cee4e3170965854404",
"signature": "957826468392052073e13147ed3e8e1642dfea10cd423bbb9a795932a15a4c122fa5e71c35a7d59198fa2d7ed28bb1f44e5c5392049607347855243ddc027d00"
}
}
],
"taker": {
"accountId": 0,
"subAccountId": 0,
"slotId": 0,
"nonce": 0,
"pairId": 0,
"size": "0",
"price": "0",
"direction": 0,
"feeRates": [
0,
0
],
"hasSubsidy": 0,
"signature": {
"pubKey": "0x43cbec0bf142a942df9db99d27bd4ceeb8f4e75f9444b4cee4e3170965854404",
"signature": "366e759d61a5052073e13147ed3e8e1642dfea10cd423bbb9a795932a15a4c122fa5e71c35a7d59198fa2d7ed28bb1f44e5c5392049607347855243ddc027d00"
}
},
"fee": "0",
"feeToken": 0,
"signature": {
"pubKey": "0x1234567bf142a942df9db99d27bd4ceeb8f4e75f9444b4cee4e3170965854404",
"signature": "1234567861a5052073e13147ed3e8e1642dfea10cd423bbb9a795932a15a4c122fa5e71c35a7d59198fa2d7ed28bb1f44e5c5392049607347855243ddc027d00"
}
}
sign contractMatching
import (
fmt
sdk "github.com/zkLinkProtocol/zklink_sdk/generated/uniffi/zklink_sdk"
)
func SignContractMatching() {
privateKey := "0xbe725250b123a39dab5b7579334d5888987c72a58f4508062545fe6e08ca94f4"
// create zklink signer
zklinkSigner, err := sdk.ZkLinkSignerNewFromHexEthSigner(privateKey)
if err != nil {
return
}
taker_contract_builder := sdk.ContractBuilder {
sdk.AccountId(1),
sdk.SubAccountId(1),
sdk.SlotId(2),
sdk.Nonce(10),
sdk.PairId(1),
*big.NewInt(45454),
*big.NewInt(113),
true,
5,
3,
false,
}
unsigned_taker_contract := sdk.NewContract(taker_contract_builder)
taker_contract, err := unsigned_taker_contract.CreateSignedContract(
zklinkSigner,
)
maker_contract1_builder := sdk.ContractBuilder {
sdk.AccountId(3),
sdk.SubAccountId(1),
sdk.SlotId(2),
sdk.Nonce(6),
sdk.PairId(1),
*big.NewInt(43434),
*big.NewInt(6767),
true,
1,
2,
false,
}
maker_contract2_builder := sdk.ContractBuilder {
sdk.AccountId(5),
sdk.SubAccountId(1),
sdk.SlotId(2),
sdk.Nonce(100),
sdk.PairId(1),
*big.NewInt(45656),
*big.NewInt(343),
true,
8,
20,
true,
}
unsigned_maker_contract1 := sdk.NewContract(maker_contract1_builder)
unsigned_maker_contract2 := sdk.NewContract(maker_contract2_builder)
maker_contract1, err := unsigned_maker_contract1.CreateSignedContract(
zklinkSigner,
)
maker_contract2, err := unsigned_maker_contract2.CreateSignedContract(
zklinkSigner,
)
var makers []*sdk.Contract
makers = make([]*sdk.Contract,2)
makers[0] = maker_contract1
makers[1] = maker_contract2
builder := sdk.ContractMatchingBuilder {
sdk.AccountId(1),
sdk.SubAccountId(1),
taker_contract,
makers,
*big.NewInt(5545),
sdk.TokenId(17),
}
tx := sdk.NewContractMatching(builder)
signer, err := sdk.NewSigner(privateKey)
if err != nil {
return
}
txSignature, err := signer.SignContractMatching(tx)
if err != nil {
return
}
fmt.Println("L1 signature: %s", txSignature.Layer1Signature)
fmt.Println("signed Tx: %s", txSignature.Tx)
submitterSignature, err := signer.SubmitterSignature(txSignature.Tx)
fmt.Println("submitter signature: %s, %s", submitterSignature.PubKey, submitterSignature.Signature)
// get submitter signature
zklinkTx := tx.ToZklinkTx()
submitterSignature, err := signer.SubmitterSignature(zklinkTx)
fmt.Println("submitter signatur: %s, %s", submitterSignature.PubKey, submitterSignature.Signature)
}
For more detail please refer to Golang example in SDK
const {ContractMatchingBuilder,Signer,newContractMatching,newContract,ContractBuilder,RpcClient } = require('./node-dist/zklink-sdk-node');
async function testContractMatching() {
const private_key = "be725250b123a39dab5b7579334d5888987c72a58f4508062545fe6e08ca94f4";
try {
const signer = new Signer(private_key);
let taker_contract_builder = new ContractBuilder(5,1,1,3,2,
"343434343434","5454545445",true,50,22,false);
let unsigned_taker_contract = newContract(taker_contract_builder);
let taker_contract = signer.createSignedContract(unsigned_taker_contract);
console.log(taker_contract);
let maker_contract_builder1 = new ContractBuilder(5,1,1,4,2,
"556556","898989",false,50,22,true);
let unsigned_maker_contract1 = newContract(maker_contract_builder1);
let maker_contract1 = signer.createSignedContract(unsigned_maker_contract1);
console.log(maker_contract1);
let maker_contract_builder2 = new ContractBuilder(5,1,1,5,2,
"54554","78787878",false,50,22,false);
let unsigned_maker_contract2 = newContract(maker_contract_builder2);
let maker_contract2 = signer.createSignedContract(unsigned_maker_contract2);
console.log(maker_contract2);
let tx_builder = new ContractMatchingBuilder(5,1,taker_contract,[maker_contract1,maker_contract2],"34343",17);
let tx = newContractMatching(tx_builder);
console.log(tx);
let tx_signature = signer.signContractMatching(tx);
console.log(tx_signature);
let submitter_signature = signer.submitterSignature(tx_signature.tx);
console.log(submitter_signature);
//send to zklink
let rpc_client = new RpcClient("testnet");
let tx_hash = await rpc_client.sendTransaction(tx_signature.tx,null,submitter_signature);
console.log(tx_hash);
} catch (error) {
console.error(error);
}
}
For more detail please refer to javascript example
Last updated