Skip to content

BaerChain pendingOrder transaction

woodbaer edited this page Aug 22, 2019 · 4 revisions

pendingOrder Transaction

1. 请求Json文件说明 返回目录

{
	"from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
	"to":"0x00000000000000000000000000000000766f7465",
	"value":"0x0",
	"data":[
	    {
		"type":3,
		"m_from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
		"m_type":2,
		"m_token_type":1,
		"m_buy_type":0,
  		"m_num":"0x0",
		"m_price":"0x5f5e100"
	     }
	  ],
	"chainId":"0x1",
	"nonce":"0x0",
	"gas":"0x9c40",
	"gasPrice":"0x5"
}
  • 可查看代码进行json组装
  • params参数说明
    • 备注:当to填其他地址,且data不为空时,默认to为调用的合约地址,且将from中转出value(value如果也有值)的值到to中,一般禁止此种操作
from     :类型为string,挂单交易(pendingOrder)发起地址
to       :类型为string,固定地址,不能更改
value    : 类型为string,默认为"0x0"
data     : 类型为string,挂单详细数据 
           > type         : 类型为int,固定为3,表示挂单交易(pendingOrder)
           > m_from       : 类型为string,挂单交易(pendingOrder)发起地址,与from相同
           > m_type       : 类型为int (1 : 卖,2 : 买)                           
           > m_token_type : 类型为int,币种(1 : cookie)
           > m_buy_type   : 类型为int,价格类型(0 : 市价, 1 : 限价) 
                            注 : (1)当m_buy_type为1时,m_num和m_price不能为0
                                 (2)m_type为2,m_buy_type为0,m_num为0,m_pirce不能为0
				 (3)m_type为1,m_buy_type为0,m_num不能为0,m_pirce为0
                                 (4)以市价挂单时(即m_buy_type为0时),交易池中需要有能将其戳和成功的对应的单,否则,校检不能通过,导致不能挂单
           > m_num        : 类型为string,16进制,买、卖的数量(cookie) (数量为8位精度,即1颗Cookie为100000000;可传入最小值为10000,表示0.0001颗Cookie;此时规定m_num的值转换为10进制时必须以4个0结尾)
           > m_price      : 类型为string,16进制,当m_buy_type为1时,为买、卖每个cookie的单价(单价为8位精度,即单价1为100000000;可传入最小值为10000,表示单价的0.0001;此时规定m_price的值转换为10进制时必须以4个0结尾)
                            当m_buy_type为0时,为买、卖cookie的总价(总价为8位精度,发起交易时为100000000为1个cookie, 可传入的最小值为10000,表示0.0001个cookie;
							此时规定此时规定m_price的值转换为10进制时必须以4个0结尾,注意当挂单地址没有cookie时,挂的单买的cookie成交后不足以支付gas费用,则挂单不成功)

chainId  : 类型为string,16进制,链ID, 必须和链创世chainId相同
nonce    : 类型为string,16进制,nonce值,每次执行后+1
gas      : 类型为string,16进制,为交易执行提供的 gas 整数
gasPrice : 类型为string,16进制,用于每一个支付 gas 的 gasPrice 整数

2. 挂单交易(pendingOrder)过程说明 返回目录

2.1 确认余额 返回目录

  • 说明: 查询地址余额,确认余额是否能够进行挂单交易

    • 地址d0e89b32875f5a1d68ecbfb3995263adc3439bea以市价买cookie
  • 指令

     curl -d '{"jsonrpc":"2.0","id":9,"method":"brc_getBalance","params":["d0e89b32875f5a1d68ecbfb3995263adc3439bea","latest"]}'  10.0.5.40:8111
    
  • 返回结果

     {
     	"id": 9,
     	"jsonrpc": "2.0",
     	"result": {
     		"Address": "0xd0e89b32875f5a1d68ecbfb3995263adc3439bea",
     		"BRC": "0x2e90edd000",(转为10进制为200000000000,因为为8为精度,所以有2000个BRC)
     		"FBRC": "0x0",
     		"FBalance": "0x0",
     		"balance": "0x0", (可以看见cookie为0)
     		"ballot": "0x0",
     		"cookieinsummury": "0x0",
     		"nonce": "0x0",
     		"poll": "0x0",
     		"vote": null
     	}
     }
    
  • 备注: 当前没有cookie的时候,可以用 市价买cookie 的方式挂单买cookie,挂单撮合成功后会自动扣出消耗的gas

2.2 市价买cookie 返回目录

  • 地址d0e89b32875f5a1d68ecbfb3995263adc3439bea以市价买cookie
{
	"from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
	"to":"0x00000000000000000000000000000000766f7465",
	"value":"0",
	"data":[
	    {
		"type":3,
		"m_from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
		"m_type":2,           (2表示买)
		"m_token_type":1,     (1表示cookie)
		"m_buy_type":0,       (0表示市价)
  		"m_num":"0x0",        (此时默认为0)
		"m_price":"0x5f5e100" (此时m_price表示用于买cookie的BRC总数,转为10进制为100000000,
                                        因8位精度,可得当前用1个BRC市价去买cookie)
	     }
	 ],
	"chainId":"0x1",
	"nonce":"0x2",
	"gas":"0x9c40",
	"gasPrice":"0x5"
}
  • 查询当前地址余额情况得
{
    "id": 9,
    "jsonrpc": "2.0",
    "result": {
	"Address": "0xd0e89b32875f5a1d68ecbfb3995263adc3439bea",
	"BRC": "0x2e8af7ef00",  (转为10进制为199900000000,因为为8为精度,所以为1999个BRC,因为上面用了1个BRC去买cookie)
	"FBRC": "0x0",
	"FBalance": "0x0",
	"balance": "0x5f29450", (表示cookie的数量,转为10进制为99783760,因为为8为精度,所以扣除gas费用后,
                                 此时得到0.9978376个cookie,当然由于市价的不同,得到的cookie数量会不同,
                                 具体以实际为准,本次用于测试,以帮助大家了解)
	"ballot": "0x0",
 	"cookieinsummury": "0x0",
	"nonce": "0x1",
	"poll": "0x0",
	"vote": null
     }
}
  • 此时,我们有足够的BRC和cookie了,那么再测试限价买cookie

2.3 限价买cookie 返回目录

  • 地址d0e89b32875f5a1d68ecbfb3995263adc3439bea以限价买cookie
{
    "from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
    "to":"0x00000000000000000000000000000000766f7465",
    "value":"0x0",
    "data":[
	{
		"type":3,
		"m_from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
		"m_type":2,           (2表示买)
		"m_token_type":1,     (1表示cookie)
		"m_buy_type":1,       (1表示限价)
		"m_num":"0x5f5e100",  (转换为10进制得100000000,8位精度为1,即表示买1个cookie)
		"m_price":"0x5f5e100" (转换为10进制得100000000,8位精度为1,此时表示买cookie的单价是1个BRC)
                                    > (1)可知此时是限价用BRC去买cookie,买cookie的个数是1个,单价是1个BRC,那么数量乘以单价
                                         即1 * 1 = 1,说明此时我想花费1个BRC去买1个cookie
                                    > (2)如果我想买100个cookie单价仍然是1个BRC,那么数量乘以单价,
                                         即100 * 1 = 100,说明此时我想花费100个BRC去买100个cookie
                                    > (3)如果卖盘有对应的单,则会撮合交易成功,我得到我想要的cookie,别人得到需要的BRC,
                                         当然,具体以实际需求为主,本测试便于于帮助大家理解  
 	}
	],
    "chainId":"0x1",
    "nonce":"0x2",
    "gas":"0x13880",
    "gasPrice":"0x5"
}
  • 查询余额(brc_getBalance)
{
	"id": 9,
	"jsonrpc": "2.0",
	"result": {
		"Address": "0xd0e89b32875f5a1d68ecbfb3995263adc3439bea",
		"BRC": "0x2e85020e00", (转换为10进制为199800000000,因8位精度,可知现在有1998个BRC)
		"FBRC": "0x0",
		"FBalance": "0x0",
		"balance": "0xbe52490",(转换为10进制为199566480,因8位精度,可知现在有1.99566480个cookie,
                                        表明刚才限价买了1个cookie)
		"ballot": "0x0",
		"cookieinsummury": "0x0",
		"nonce": "0x2",
		"poll": "0x0",
		"vote": null
	}
}

2.4 限价卖cookie 返回目录

  • 地址d0e89b32875f5a1d68ecbfb3995263adc3439bea以限价卖cookie
{
	"from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
	"to":"0x00000000000000000000000000000000766f7465",
	"value":"0x0",
	"data":[
	    {
		"type":3,
		"m_from":"d0e89b32875f5a1d68ecbfb3995263adc3439bea",
		"m_type":1,           (1表示卖)
		"m_token_type":1,     (1表示cookie)
		"m_buy_type":1,       (1表示限价)
		"m_num":"0x5f5e100",  (转换为10进制得100000000,8位精度为1,此时表示卖掉1个cookie)
		"m_price":"0x5f5e100" (转换为10进制得100000000,8位精度为1,此时表示卖掉1个cookie的单价为1个BRC)
	    }
	],
	"chainId":"0x1",
	"nonce":"0x2",
	"gas":"0x13880",
	"gasPrice":"0x5"
}
  • 查询余额得
{
	"id": 9,
	"jsonrpc": "2.0",
	"result": {
		"Address": "0xd0e89b32875f5a1d68ecbfb3995263adc3439bea",
		"BRC": "0x2e85020e00", (转换为10进制为199800000000,因8位精度,可知现在有1998个BRC)
		"FBRC": "0x0",
		"FBalance": "0x5f5e100",(转换为10进制得100000000,8位精度为1,FBalance表示此时冻结了1个cookie,因为刚才测试
                                         挂单限价去卖了1个cookie,但并没有被交易,还在卖盘上,所以这个cookie被冻结直到交易成功
                                         或者自己撤单)
		"balance": "0x5ecb620",(转换为10进制得99399200,8位精度为0.993992个cookie,因为刚才有1个cookie拿去卖了,由上述可知)
		"ballot": "0x0",
 		"cookieinsummury": "0x0",
		"nonce": "0x3",
		"poll": "0x0",
		"vote": null
	}
}

2.5 市价卖cookie 返回目录

  • 以市价卖cookie时,如果此时买盘没有对应的买单,则挂单不成功
{
	"from":"cccc7a30bf688c060524dfd759fe2627ed3387bc",
	"to":"0x00000000000000000000000000000000766f7465",
	"value":"0",
	"data":[
		{
			"type":3,
			"m_from":"cccc7a30bf688c060524dfd759fe2627ed3387bc",
			"m_type":1,          (1表示卖)
			"m_token_type":1,    (1表示cookie)
			"m_buy_type":0,      (0表示市价)
			"m_num":"0x5f5e100", (转换为10进制得100000000,8位精度为1,此时表示卖掉1个cookie)
			"m_price":"0"
		}
	],
	"chainId":"0x1",
	"nonce":"0x2",
	"gas":"0x9c40",
	"gasPrice":"0x5"
}

备注: 如果此时以市价卖cookie时,如果此时买盘没有对应的买单,则会显示校检不过,没有对应的单,如下:

{
	"error": {
		"code": 0,
		"data": null,
		"message": "verifyPendingorder failed :There is no order for the corresponding order pool!"
	},
	"id": 1,
	"jsonrpc": "2.0"
}

更多撮合挂单交易(pendingOrder)查询接口请查看BaerChain撮合系统RPC接口

Clone this wiki locally