3 去中心化撮合应用示例
恒为区块链去中心化撮合模块实现了不同通证按照比率进行兑换的功能,它是基于区块链账本实现的。在去中心化撮合模块中,HWT和其他二级同质化通证之间,可以任意两两组合创建交易对。撮合系统按照交易对之间的比率和时间来完成撮合。撮合的原则:比率优先,相同比率的时间优先。
用户可以通过以下JSON-RPC接口来实现去中心化撮合的功能:
下面我们通过一个例子,模拟在去中心化撮合中一个挂单从创建到成交的生命周期:
在本例中,Alice和Bob想通过去中心化撮合功能兑换数字资产。经历了查询当前数字资产余额、创建挂单、查看挂单,由于挂单后没有成交,取消后又重新挂单,最终成交,并核查了撮合结果。具体操作步骤如下:
3.1 准备两个交易账户
Alice和Bob分别拥有各自的区块链账户,他们想交换手中的BBB和AAA通证。首先,通过“account_lines”接口分别查询Alice和Bob账户的二级通证余额。
Alice账号:hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd
Bob账号:hPcNzota6B8YBokrYtcTNqQVCngtbnWfux
查询Alice二级通证余额:
请求:
{
"method": "account_lines",
"params": [
{
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd"
}
]
}
响应:
{
"result": {
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"ledger_current_index": 553,
"lines": [
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "100000",
"currency": "BBB",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
},
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "5000",
"currency": "AAA",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
}
],
"status": "success",
"validated": false
}
}
Alice持有账户hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA发行的100000BBB和5000AAA。
查询Bob二级通证余额: 请求:
{
"method": "account_lines",
"params": [
{
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux"
}
]
}
响应:
{
"result": {
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"ledger_current_index": 561,
"lines": [
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "100000",
"currency": "BBB",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
},
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "5000",
"currency": "AAA",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
}
],
"status": "success",
"validated": false
}
}
Bob持有账户hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA发行的100000BBB和5000AAA。
3.2 Alice创建一个AAA/BBB的交易对挂单
Alice想用手中的100AAA,去兑换700BBB。通过“submit”接口创建OfferCreate类型的挂单交易。TakerGets表示交易对手得到的通证,TakerPays表示交易对手支付的通证。
请求:
{
"method": "submit",
"params": [{
"secret": "ssqtQ2Jc*********ARqb9EYe",
"tx_json": {
"TransactionType": "OfferCreate",
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
}
}
}]
}
响应:
{
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"status": "success",
"tx_blob": "1200072280000000240000000364D518DE76816D8000000000000000000000000000434E5900000000002E244E6F20104E57C0C60BD823CB312BF10928C765D5038D7EA4C6800000000000000000000000000055534400000000002E244E6F20104E57C0C60BD823CB312BF10928C76840000000000027107321029A80E85C9EAFE4CF6376524AF360724D4ECE4F2B6197A2E1172E81CC071B7D0C74463044022011DD92C442CE9FFFABA68CB33CD74984C7D07232678BD7FAD61D01ECE579757702201C6A432C01DDD96DB7EF852FBF47BA3D8843D3081B14AC53A96A6A92BE221C8C81148B240FCDC580525F0BFCABB590F434252AC36AF8",
"tx_json": {
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"Fee": "10000",
"Flags": 2147483648,
"Sequence": 3,
"SigningPubKey": "029A80E85C9EAFE4CF6376524AF360724D4ECE4F2B6197A2E1172E81CC071B7D0C",
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3044022011DD92C442CE9FFFABA68CB33CD74984C7D07232678BD7FAD61D01ECE579757702201C6A432C01DDD96DB7EF852FBF47BA3D8843D3081B14AC53A96A6A92BE221C8C",
"hash": "6AC9F34B7829FCE1897AB1841D842EBEEDF64C1FC3D0B38E5C51A4F0145CB1BA"
}
}
}
3.3 Alice查看自己的挂单交易的详情
Alice完成挂单后,可以通过“tx”接口根据挂单交易hash查询挂单在链上的详细信息。
请求:
{
"method": "tx",
"params": [
{
"transaction": "6AC9F34B7829FCE1897AB1841D842EBEEDF64C1FC3D0B38E5C51A4F0145CB1BA",
"binary": false
}
]
}
响应:
{
"result": {
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"Fee": "10000",
"Flags": 2147483648,
"Sequence": 3,
"SigningPubKey": "029A80E85C9EAFE4CF6376524AF360724D4ECE4F2B6197A2E1172E81CC071B7D0C",
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3044022011DD92C442CE9FFFABA68CB33CD74984C7D07232678BD7FAD61D01ECE579757702201C6A432C01DDD96DB7EF852FBF47BA3D8843D3081B14AC53A96A6A92BE221C8C",
"date": 628326350,
"hash": "6AC9F34B7829FCE1897AB1841D842EBEEDF64C1FC3D0B38E5C51A4F0145CB1BA",
"inLedger": 77,
"ledger_current_index": 89,
"ledger_index": 77,
"meta": {
"AffectedNodes": [
{
"CreatedNode": {
"LedgerEntryType": "Offer",
"LedgerIndex": "0FB6597BF3397BE7CEF9BCBE77CE346468DC2FA97B656866D5A8B65ECE5E146D",
"NewFields": {
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"BookDirectory": "5319B6ABC4C54DB20FC004231D9515081371E71E7F4183B85518DE76816D8000",
"Sequence": 3,
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
},
"TotalTakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TotalTakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
}
}
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "hHb9CJAWyB4hj91VRWn96DkukG4bwdtyTr",
"Balance": "99999990000140000",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 6
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8",
"PreviousFields": {
"Balance": "99999990000130000"
},
"PreviousTxnID": "0349C6FC223B5B308087B4A2BCDF7524458170C349F66F575557769C6005BACA",
"PreviousTxnLgrSeq": 28
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"Balance": "1999970000",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 4
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "3E85929FA644A46D1A96D685D00B5A4BDEB90FD1D7D7FCD1C556DDC79CDF8101",
"PreviousFields": {
"Balance": "1999980000",
"OwnerCount": 2,
"Sequence": 3
},
"PreviousTxnID": "B5B98C9C6BE09F8BF9AC50DECADC3F7800C26EE3FFD6749E52706B06949E107F",
"PreviousTxnLgrSeq": 21
}
},
{
"ModifiedNode": {
"FinalFields": {
"Flags": 0,
"Owner": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"RootIndex": "4239D02F30951004B5E01A1A4026A0B1B5AAA7B0B50B17709B18225CB4C160F0"
},
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "4239D02F30951004B5E01A1A4026A0B1B5AAA7B0B50B17709B18225CB4C160F0"
}
},
{
"CreatedNode": {
"LedgerEntryType": "DirectoryNode",
"LedgerIndex": "5319B6ABC4C54DB20FC004231D9515081371E71E7F4183B85518DE76816D8000",
"NewFields": {
"ExchangeRate": "5518DE76816D8000",
"RootIndex": "5319B6ABC4C54DB20FC004231D9515081371E71E7F4183B85518DE76816D8000",
"TakerGetsCurrency": "0000000000000000000000005553440000000000",
"TakerGetsIssuer": "2E244E6F20104E57C0C60BD823CB312BF10928C7",
"TakerPaysCurrency": "000000000000000000000000434E590000000000",
"TakerPaysIssuer": "2E244E6F20104E57C0C60BD823CB312BF10928C7"
}
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"status": "success",
"validated": true
}
}
3.4 Alice查看自己的挂单薄
Alice根据自己的区块链账号,可以通过“account_offers”接口查询该账号目前在链上未成交的挂单列表。
请求:
{
"method": "account_offers",
"params": [
{
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd"
}
]
}
响应:
{
"result": {
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"ledger_current_index": 517,
"offers": [
{
"flags": 0,
"quality": "7",
"seq": 3,
"taker_gets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"taker_pays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
}
}
],
"status": "success",
"validated": false
}
}
Alice的挂单因为没有成交,所以可以通过“account_offers”接口查到他在链上创建的挂单。如果挂单完成成交,将返回空的列表。
3.5 Bob创建一个BBB/AAA的交易对挂单
在Alice挂单后,Bob正好想用手中的BBB兑换成AAA。他先挂了一个65BBB/10AAA的订单。
请求:
{
"method": "submit",
"params": [{
"secret": "snaAAALj********vEobavo4",
"tx_json": {
"TransactionType": "OfferCreate",
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"TakerGets": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "65"
},
"TakerPays": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "10"
}
}
}]
}
响应:
{
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"status": "success",
"tx_blob": "1200072280000000240000000364D4C38D7EA4C6800000000000000000000000000055534400000000002E244E6F20104E57C0C60BD823CB312BF10928C765D4D717B72F0A4000000000000000000000000000434E5900000000002E244E6F20104E57C0C60BD823CB312BF10928C7684000000000002710732102FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F874473045022100AAD484E970349A64E3D63D813AAAF5DFF98592366BE5A848D58CFD729085861402201907AFBDBE8118ABDF3197E785E665A1AF67B7FA531CE2AF0DDAC0FB82E57EED8114F7FD027F816E04259DE7BCEA1058956FC51A3B61",
"tx_json": {
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"Fee": "10000",
"Flags": 2147483648,
"Sequence": 3,
"SigningPubKey": "02FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F8",
"TakerGets": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "65"
},
"TakerPays": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "10"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100AAD484E970349A64E3D63D813AAAF5DFF98592366BE5A848D58CFD729085861402201907AFBDBE8118ABDF3197E785E665A1AF67B7FA531CE2AF0DDAC0FB82E57EED",
"hash": "C648531C909FDA611360A4255D030D3081AB2D4A9C38A31B6F4D74D035CDF878"
}
}
}
3.6 Bob查看自己的挂单
Bob挂单后通过“account_offers”接口查看自己的挂单列表。
请求:
{
"method": "account_offers",
"params": [
{
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux"
}
]
}
响应:
{
"result": {
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"ledger_current_index": 571,
"offers": [
{
"flags": 0,
"quality": "0.1538461538461538",
"seq": 3,
"taker_gets": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "65"
},
"taker_pays": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "10"
}
}
],
"status": "success",
"validated": false
}
}
由于Bob挂单和Alice挂单的价格不吻合,无法撮合。因此,这里可以看到Bob的挂单并没有成交。
3.7 Bob查看链上撮合系统大厅中的挂单簿
Bob想要自己提交的BBB/AAA交易对尽快成交,所以通过“book_offers”接口查看AAA/BBB交易对在挂单簿中的情况。需要注意的是,因为Bob挂的是BBB/AAA的交易对,其对手挂单是反向的,即AAA/BBB。
请求:
{
"method": "book_offers",
"params": [{
"taker":"hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"taker_gets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA"
},
"taker_pays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA"
}
}]
}
响应:
{
"result": {
"ledger_current_index": 1030,
"offers": [
{
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"BookDirectory": "5319B6ABC4C54DB20FC004231D9515081371E71E7F4183B85518DE76816D8000",
"BookNode": "0000000000000000",
"Flags": 0,
"LedgerEntryType": "Offer",
"OwnerNode": "0000000000000000",
"PreviousTxnID": "6AC9F34B7829FCE1897AB1841D842EBEEDF64C1FC3D0B38E5C51A4F0145CB1BA",
"PreviousTxnLgrSeq": 77,
"Sequence": 3,
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
},
"TotalTakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TotalTakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
},
"index": "0FB6597BF3397BE7CEF9BCBE77CE346468DC2FA97B656866D5A8B65ECE5E146D",
"owner_funds": "5000",
"quality": "7"
}
],
"status": "success",
"validated": false
}
}
3.8 Bob取消自己的挂单
Bob发现自己挂的单子价格太低,所以没有成交。他决定先通过“submit”接口的OfferCancel交易类型取消之前创建的挂单,根据市场价格重新再创建挂单。注意,这里的OfferSequence是Bob需要取消挂单的Sequence。
请求:
{
"method": "submit",
"params": [{
"secret": "snaAAALj********vEobavo4",
"tx_json": {
"TransactionType": "OfferCancel",
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"OfferSequence": 3
}
}]
}
响应:
{
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"status": "success",
"tx_blob": "12000822800000002400000005201900000003684000000000002710732102FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F874463044022044B2BBCC2D588728CE869881A6D6CCE8E922447C69179FFB3493B41EE70AE83202201E5676D3D5D384D37976F97F59D6FCC4823C0629D75BFF364AE1126C5CF8A0AB8114F7FD027F816E04259DE7BCEA1058956FC51A3B61",
"tx_json": {
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"Fee": "10000",
"Flags": 2147483648,
"OfferSequence": 3,
"Sequence": 5,
"SigningPubKey": "02FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F8",
"TransactionType": "OfferCancel",
"TxnSignature": "3044022044B2BBCC2D588728CE869881A6D6CCE8E922447C69179FFB3493B41EE70AE83202201E5676D3D5D384D37976F97F59D6FCC4823C0629D75BFF364AE1126C5CF8A0AB",
"hash": "8B805521ADCBF5E52368E79649489650BCBE6693245CF6DEE3E12E31863721E6"
}
}
}
3.9 Bob重新创建一个挂单
Bob根据市场价格又创建一个70BBB/10AAA的挂单。 请求:
{
"method": "submit",
"params": [{
"secret": "snaAAALj********vEobavo4",
"tx_json": {
"TransactionType": "OfferCreate",
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"TakerGets": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "70"
},
"TakerPays": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "10"
}
}
}]
}
响应:
{
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"status": "success",
"tx_blob": "1200072280000000240000000464D4C38D7EA4C6800000000000000000000000000055534400000000002E244E6F20104E57C0C60BD823CB312BF10928C765D4D8DE76816D8000000000000000000000000000434E5900000000002E244E6F20104E57C0C60BD823CB312BF10928C7684000000000002710732102FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F874473045022100C0F9F661A34A3BFCF3E5A414D45F4291405C47DEC638E45C91957B76554A7C57022035EC9D3DB09FCD054423567532AF0DE9B2DBED33EA68112D80293D1382CA9E4B8114F7FD027F816E04259DE7BCEA1058956FC51A3B61",
"tx_json": {
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"Fee": "10000",
"Flags": 2147483648,
"Sequence": 4,
"SigningPubKey": "02FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F8",
"TakerGets": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "70"
},
"TakerPays": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "10"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100C0F9F661A34A3BFCF3E5A414D45F4291405C47DEC638E45C91957B76554A7C57022035EC9D3DB09FCD054423567532AF0DE9B2DBED33EA68112D80293D1382CA9E4B",
"hash": "313D161567319A4051CB0E9184FE082A3C4E1E5567D8324779EE8150513F1C94"
}
}
}
3.10 Bob查看自己的挂单交易的详情
Bob通过根据挂单交易hash查看挂单详情。
请求:
{
"method": "tx",
"params": [
{
"transaction": "313D161567319A4051CB0E9184FE082A3C4E1E5567D8324779EE8150513F1C94",
"binary": false
}
]
}
响应:
{
"result": {
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"Fee": "10000",
"Flags": 2147483648,
"Sequence": 4,
"SigningPubKey": "02FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F8",
"TakerGets": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "70"
},
"TakerPays": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "10"
},
"TransactionType": "OfferCreate",
"TxnSignature": "3045022100C0F9F661A34A3BFCF3E5A414D45F4291405C47DEC638E45C91957B76554A7C57022035EC9D3DB09FCD054423567532AF0DE9B2DBED33EA68112D80293D1382CA9E4B",
"date": 628338200,
"hash": "313D161567319A4051CB0E9184FE082A3C4E1E5567D8324779EE8150513F1C94",
"inLedger": 1262,
"ledger_current_index": 1274,
"ledger_index": 1262,
"meta": {
"AffectedNodes": [
{
"ModifiedNode": {
"FinalFields": {
"Account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"Balance": "1999960000",
"Flags": 0,
"OwnerCount": 3,
"Sequence": 5
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "0F00CD13BA68C96D6E001F1F1F4D0FD440E2D496EA933A6ABF3F1D58CB04DF2E",
"PreviousFields": {
"Balance": "1999970000",
"Sequence": 4
},
"PreviousTxnID": "C648531C909FDA611360A4255D030D3081AB2D4A9C38A31B6F4D74D035CDF878",
"PreviousTxnLgrSeq": 567
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"BookDirectory": "5319B6ABC4C54DB20FC004231D9515081371E71E7F4183B85518DE76816D8000",
"BookNode": "0000000000000000",
"Flags": 0,
"OwnerNode": "0000000000000000",
"Sequence": 3,
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "90"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "630"
},
"TotalTakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TotalTakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
}
},
"LedgerEntryType": "Offer",
"LedgerIndex": "0FB6597BF3397BE7CEF9BCBE77CE346468DC2FA97B656866D5A8B65ECE5E146D",
"PreviousFields": {
"TakerGets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "100"
},
"TakerPays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "700"
}
},
"PreviousTxnID": "6AC9F34B7829FCE1897AB1841D842EBEEDF64C1FC3D0B38E5C51A4F0145CB1BA",
"PreviousTxnLgrSeq": 77
}
},
{
"ModifiedNode": {
"FinalFields": {
"Account": "hHb9CJAWyB4hj91VRWn96DkukG4bwdtyTr",
"Balance": "99999990000180000",
"Flags": 0,
"OwnerCount": 0,
"Sequence": 6
},
"LedgerEntryType": "AccountRoot",
"LedgerIndex": "2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8",
"PreviousFields": {
"Balance": "99999990000170000"
},
"PreviousTxnID": "C648531C909FDA611360A4255D030D3081AB2D4A9C38A31B6F4D74D035CDF878",
"PreviousTxnLgrSeq": 567
}
},
{
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "AAA",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-5010"
},
"Flags": 131072,
"HighLimit": {
"currency": "AAA",
"issuer": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"value": "10000000"
},
"HighNode": "0000000000000000",
"LowLimit": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "0"
},
"LowNode": "0000000000000000"
},
"LedgerEntryType": "HWCHAINState",
"LedgerIndex": "4D3027A724146B909AD8752BDA1A9ECF697BF1C9A3F0A39ED91FAF72176E2440",
"PreviousFields": {
"Balance": {
"currency": "AAA",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-5000"
}
},
"PreviousTxnID": "4CD691AB95FFE2B554C6D3361BBF58D43227B91A310DB4D2F100291DC0572FB6",
"PreviousTxnLgrSeq": 28
}
},
{
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "BBB",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-99930"
},
"Flags": 131072,
"HighLimit": {
"currency": "BBB",
"issuer": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"value": "10000000"
},
"HighNode": "0000000000000000",
"LowLimit": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "0"
},
"LowNode": "0000000000000000"
},
"LedgerEntryType": "HWCHAINState",
"LedgerIndex": "7D866E7F3FB00E92580F5F8B32AB475D03FEAE147AAFF3157BA4E474490356A2",
"PreviousFields": {
"Balance": {
"currency": "BBB",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-100000"
}
},
"PreviousTxnID": "63694D434917F6725B63567A524F7FA0F49E4577681B9BFB74C1BC1662B0505F",
"PreviousTxnLgrSeq": 24
}
},
{
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "AAA",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-4990"
},
"Flags": 131072,
"HighLimit": {
"currency": "AAA",
"issuer": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"value": "10000000"
},
"HighNode": "0000000000000000",
"LowLimit": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "0"
},
"LowNode": "0000000000000000"
},
"LedgerEntryType": "HWCHAINState",
"LedgerIndex": "BC116352359C6D47756C5FDB30D1EDE95433FF696B519E217D9915D7B46FA57D",
"PreviousFields": {
"Balance": {
"currency": "AAA",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-5000"
}
},
"PreviousTxnID": "F7091B4A31EE908A2BED778F0D1385FCEB1EC4CE9662F15D108038DBE655D6CA",
"PreviousTxnLgrSeq": 28
}
},
{
"ModifiedNode": {
"FinalFields": {
"Balance": {
"currency": "BBB",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-100070"
},
"Flags": 131072,
"HighLimit": {
"currency": "BBB",
"issuer": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"value": "10000000"
},
"HighNode": "0000000000000000",
"LowLimit": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "0"
},
"LowNode": "0000000000000000"
},
"LedgerEntryType": "HWCHAINState",
"LedgerIndex": "D9478A109CD2C17E75A04E4F18B4A1D4FD8AFCCFC92742A8F72AD0BB6C640E77",
"PreviousFields": {
"Balance": {
"currency": "BBB",
"issuer": "hhhhhhhhhhhhhhhhhhhhBZbvji",
"value": "-100000"
}
},
"PreviousTxnID": "5C32282DDFF77955238D2C73009DD796A04B430073E302C56EB05337F8EF150C",
"PreviousTxnLgrSeq": 24
}
}
],
"TransactionIndex": 0,
"TransactionResult": "tesSUCCESS"
},
"status": "success",
"validated": true
}
}
从上面可以看出“ModifiedNode”中,"LedgerEntryType": "Offer", 的部分,Alice的账号中挂单中 AAA由100变成了90,BBB由700变成了630,说明Alice的挂单已经部分成交。Bob的账号没有出现在挂单中,说明完全成交。"LedgerEntryType": "HWCHAINState"中,Alice的账号中AAA减少了10,BBB增加了70;Bob的账号中 AAA增加了10,BBB减少了70,挂单已经被撮合成交完成。
3.11 Alice查看自己的挂单
请求:
{
"method": "account_offers",
"params": [
{
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd"
}
]
}
响应:
{
"result": {
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"ledger_current_index": 1525,
"offers": [
{
"flags": 0,
"quality": "7",
"seq": 3,
"taker_gets": {
"currency": "AAA",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "90"
},
"taker_pays": {
"currency": "BBB",
"issuer": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"value": "630"
}
}
],
"status": "success",
"validated": false
}
}
这个时候可以看到Alice的挂单被部分成交,还剩下未成交部分。
3.12 Alice查看自己的挂单的撮合结果
Alice通过“account_lines”接口查询账户剩余的二级通证,发现少了10AAA,多了70BBB。
请求:
{
"method": "account_lines",
"params": [
{
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd"
}
]
}
响应:
{
"result": {
"account": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"ledger_current_index": 1383,
"lines": [
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "100070",
"currency": "BBB",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
},
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "4990",
"currency": "AAA",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
}
],
"status": "success",
"validated": false
}
}
3.13 Bob查看自己的挂单
请求:
{
"method": "account_offers",
"params": [
{
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux"
}
]
}
响应:
{
"result": {
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"ledger_current_index": 1505,
"offers": [],
"status": "success",
"validated": false
}
}
这个时候Bob已经没有挂单。
3.14 Bob查看自己的挂单的撮合结果
Bob通过“account_lines”接口查询账户剩余的二级通证,发现少了70BBB,多了10AAA。
请求:
{
"method": "account_lines",
"params": [
{
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux"
}
]
}
响应:
{
"result": {
"account": "hPcNzota6B8YBokrYtcTNqQVCngtbnWfux",
"ledger_current_index": 1379,
"lines": [
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "99930",
"currency": "BBB",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
},
{
"account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"balance": "5010",
"currency": "AAA",
"limit": "10000000",
"limit_peer": "0",
"quality_in": 0,
"quality_out": 0
}
],
"status": "success",
"validated": false
}
}