ContractMatching
Name | Type | Required | Description |
---|---|---|---|
type | String | yes | The value is "ContractMatching" |
accountId | yes | The account id | |
subAccountId | yes | The subaccount id | |
maker | Contract list | yes | The maker list |
taker | Contract | yes | The taker |
fee | BitUint | 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
Name | Type | Required | Description |
---|---|---|---|
accountId | AccountId | account id | |
subAccountId | SubAccountId | sub account id | |
slotId | SlotId | slot id | |
nonce | Nonce | nonce | |
pairId | PairId | the pair id | |
size | BigUint | position size | |
price | BigUint | price | |
direction | u8 | 1: long, 0: short | |
feeRates | [u8, u8] | The fee rates of [maker, taker],100 means 1.00% | |
hasSubsidy | u8 | 1: true, 0: false, if the maker has subsidy, the submitter will give maker subsidy | |
signature | ZkLinkSignature | 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