Limit order structure
Field | Type | Inner Solidity type | Description |
---|---|---|---|
salt | string | uint256 | some unique value. It is necessary to be able to create limit orders with the same parameters (so that they have a different hash) |
makerAsset | string | address | the address of the asset you want to sell (address of a token contract) |
takerAsset | string | address | the address of the asset you want to buy (address of a token contract) |
maker | string | address | the address of the limit order creator |
receiver | string | address | by default contains a zero address, which means that taker asset will be sent to the address of the creator of the limit order. If you set a value, then taker asset will be sent to the specified address |
allowedSender | string | address | by default contains a zero address, which means that a limit order is available for everyone to fill. If you set a value, then the limit order will be available for execution only for the specified address (private limit order) |
makingAmount | string | uint256 | amount of maker asset |
takingAmount | string | uint256 | amount of taker asset |
interactions | string | bytes | hex bytes string with interactions meta fields concat(makerAssetData, takerAssetData, getMakingAmount, getTakingAmount, predicate, permit, preIntercation, postInteraction) |
offsets | string | uint256 | every 32's bytes represents offset of the n'ths interaction |
interactions
meta fields
Index | Field | Type | Inner Solidity type | Description |
---|---|---|---|---|
0 | makerAssetData | string | bytes | the technical info about a maker asset and its amount |
1 | takerAssetData | string | bytes | the technical info about a taker asset and its amount |
2 | getMakingAmount | string | bytes | technical information to get the amount of the maker asset |
3 | getTakingAmount | string | bytes | technical information to get the amount of the taker asset |
4 | predicate | string | bytes | a predicate call data. See more Predicate docs |
5 | permit | string | bytes | a permit (EIP-2612 ) call data. Could be built using utility library |
6 | preInteraction | string | bytes | What to do before the transfer. A call data for InteractiveNotificationReceiver. See more Interaction receiver docs |
7 | postInteraction | string | bytes | What tot do after the transfer has been made. a call data for InteractiveNotificationReceiver. See more Interaction receiver docs |
Example:
await new LimitOrderBuilder(...).buildLimitOrder({
makerAssetAddress: '0x000000000000000000000000000000000000000A',
takerAssetAddress: '0x000000000000000000000000000000000000000B',
makerAddress: '0x0000000000000000000000000000000000000001',
receiver: '0x0000000000000000000000000000000000000002',
allowedSender: '0x0000000000000000000000000000000000000003',
makingAmount: '100',
takingAmount: '200',
getMakingAmount: '0x11',
getTakingAmount: '0x2222',
predicate: '0x333333',
permit: '0x44444444',
preInteraction: '0x5555555555',
postInteraction: '0x666666666666',
});
// {
// salt: '390590399942',
// makerAsset: '0x000000000000000000000000000000000000000A',
// takerAsset: '0x000000000000000000000000000000000000000B',
// maker: '0x0000000000000000000000000000000000000001',
// receiver: '0x0000000000000000000000000000000000000002',
// allowedSender: '0x0000000000000000000000000000000000000003',
// makingAmount: '100',
// takingAmount: '200',
// offsets: '566158880104319961733422544660299808878295192710391671368140609028096',
// interactions: '0x112222333333444444445555555555666666666666'
// }
Where the each offset is iteration bytes offset:
// interactions: '0x112222333333444444445555555555666666666666'
// ^ ^ ^ ^ ^ ^ ^
// 1 2 4 7 11 16 21
// Note: offset is bytes offset. Not a hex offset.
//
// > Buffer.from('112222333333444444445555555555666666666666', 'hex')
// <Buffer 11 22 22 33 33 33 44 44 44 44 55 55 55 55 55 66 66 66 66 66 66>
// ^ ^ ^ ^ ^ ^ ^
// 1 2 4 7 11 16 21
(0n << (0n)) // makerAssetData, length: 0, start: 0, end: 0
+ (0n << (32n * 1n)) // takerAssetData, length: 0, start: 0, end: 0
+ (1n << (32n * 2n)) // getMakingAmount, length: 1, start: 0, end: 1
+ (3n << (32n * 3n)) // getTakingAmount, length: 2, start: 2, end: 3
+ (6n << (32n * 4n)) // predicate, length: 3, start: 4, end: 6
+ (10n << (32n * 5n)) // permit, length: 4, start: 7, end: 10
+ (15n << (32n * 6n)) // preInteraction, length: 5, start: 11, end: 15
+ (21n << (32n * 7n)) // postInteraction, length: 6, start: 16, end: 21
===
566158880104319961733422544660299808878295192710391671368140609028096
===
0x150000000f0000000a0000000600000003000000010000000000000000
// ^ ^ ^ ^ ^ ^ ^
// 21 15 10 6 3 1 0