Created
June 4, 2019 18:24
-
-
Save dave4506/6c4d3c229cde9a9844fe7a8f899decf6 to your computer and use it in GitHub Desktop.
Dydx's parseOrders functionality to take bytes and convert back to 0x signed orders
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function parseOrders( | |
bytes memory orderData, | |
address makerToken, | |
address takerToken | |
) | |
private | |
pure | |
returns (Order[] memory) | |
{ | |
uint256 numOrders = parseNumOrders(orderData); | |
Order[] memory orders = new Order[](numOrders); | |
bytes memory makerAssetData = tokenAddressToAssetData(makerToken); | |
bytes memory takerAssetData = tokenAddressToAssetData(takerToken); | |
for (uint256 i = 0; i < numOrders; i++) { | |
// store pointer to order memory | |
Order memory order = orders[i]; | |
order.makerFee = 0; | |
order.takerFee = 0; | |
order.makerAssetData = makerAssetData; | |
order.takerAssetData = takerAssetData; | |
uint256 dataOffset = getOrderDataOffset(i); | |
/* solium-disable-next-line security/no-inline-assembly */ | |
assembly { | |
mstore(order, mload(add(add(orderData, 32), dataOffset))) // makerAddress | |
mstore(add(order, 32), mload(add(add(orderData, 64), dataOffset))) // takerAddress | |
mstore(add(order, 64), mload(add(add(orderData, 96), dataOffset))) // feeRecipientAddress | |
mstore(add(order, 96), mload(add(add(orderData, 128), dataOffset))) // senderAddress | |
mstore(add(order, 128), mload(add(add(orderData, 160), dataOffset))) // makerAssetAmount | |
mstore(add(order, 160), mload(add(add(orderData, 192), dataOffset))) // takerAssetAmount | |
mstore(add(order, 256), mload(add(add(orderData, 224), dataOffset))) // expirationTimeSeconds | |
mstore(add(order, 288), mload(add(add(orderData, 256), dataOffset))) // salt | |
} | |
} | |
return orders; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment