More readability for 1155 proxy
This commit is contained in:
parent
b596e02752
commit
dde4ed3754
@ -164,42 +164,45 @@ contract ERC1155Proxy is
|
|||||||
let assetDataLength := calldataload(assetDataOffset)
|
let assetDataLength := calldataload(assetDataOffset)
|
||||||
|
|
||||||
// Load offset to parameters section in asset data
|
// Load offset to parameters section in asset data
|
||||||
let offsetToParamsInAssetData := add(assetDataOffset, 36)
|
let paramsInAssetDataOffset := add(assetDataOffset, 36)
|
||||||
|
|
||||||
// Memory offset of Data Area when stored in memory (Table #3)
|
// Offset of end of Data Area in memory.
|
||||||
let dataAreaPtr := 164
|
// This value will grow as we construct Table #3.
|
||||||
|
let dataAreaEndOffset := 164
|
||||||
|
|
||||||
// Load amount by which to scale values
|
// Load amount by which to scale values
|
||||||
let amount := calldataload(100)
|
let amount := calldataload(100)
|
||||||
|
|
||||||
// Store pointer to `ids` (Table #3)
|
// Store pointer to `ids` (Table #3)
|
||||||
mstore(68, sub(dataAreaPtr, 4))
|
// Subtract 4 for `safeBatchTrasferFrom` selector
|
||||||
|
mstore(68, sub(dataAreaEndOffset, 4))
|
||||||
|
|
||||||
// Copy `ids` from `assetData` (Table #2) to memory (Table #3)
|
// Copy `ids` from `assetData` (Table #2) to memory (Table #3)
|
||||||
let offsetToIds := add(offsetToParamsInAssetData, calldataload(add(assetDataOffset, 68)))
|
let idsOffset := add(paramsInAssetDataOffset, calldataload(add(assetDataOffset, 68)))
|
||||||
let idsLength := calldataload(offsetToIds)
|
let idsLength := calldataload(idsOffset)
|
||||||
let idsLengthInBytes := mul(idsLength, 32)
|
let idsLengthInBytes := mul(idsLength, 32)
|
||||||
calldatacopy(
|
calldatacopy(
|
||||||
dataAreaPtr,
|
dataAreaEndOffset,
|
||||||
offsetToIds,
|
idsOffset,
|
||||||
add(idsLengthInBytes, 32)
|
add(idsLengthInBytes, 32)
|
||||||
)
|
)
|
||||||
dataAreaPtr := add(dataAreaPtr, add(idsLengthInBytes, 32))
|
dataAreaEndOffset := add(dataAreaEndOffset, add(idsLengthInBytes, 32))
|
||||||
|
|
||||||
// Store pointer to `values` (Table #3)
|
// Store pointer to `values` (Table #3)
|
||||||
mstore(100, sub(dataAreaPtr, 4))
|
// Subtract 4 for `safeBatchTrasferFrom` selector
|
||||||
|
mstore(100, sub(dataAreaEndOffset, 4))
|
||||||
|
|
||||||
// Copy `values` from `assetData` (Table #2) to memory (Table #3)
|
// Copy `values` from `assetData` (Table #2) to memory (Table #3)
|
||||||
let offsetToValues := add(offsetToParamsInAssetData, calldataload(add(assetDataOffset, 100)))
|
let valuesOffset := add(paramsInAssetDataOffset, calldataload(add(assetDataOffset, 100)))
|
||||||
let valuesLength := calldataload(offsetToValues)
|
let valuesLength := calldataload(valuesOffset)
|
||||||
let valuesLengthInBytes := mul(valuesLength, 32)
|
let valuesLengthInBytes := mul(valuesLength, 32)
|
||||||
|
|
||||||
// Store length of `values`
|
// Store length of `values`
|
||||||
mstore(dataAreaPtr, valuesLength)
|
mstore(dataAreaEndOffset, valuesLength)
|
||||||
dataAreaPtr := add(dataAreaPtr, 32)
|
dataAreaEndOffset := add(dataAreaEndOffset, 32)
|
||||||
|
|
||||||
// Scale and store elements of `values`
|
// Scale and store elements of `values`
|
||||||
let valuesBegin := add(offsetToValues, 32)
|
let valuesBegin := add(valuesOffset, 32)
|
||||||
let valuesEnd := add(valuesBegin, valuesLengthInBytes)
|
let valuesEnd := add(valuesBegin, valuesLengthInBytes)
|
||||||
for { let currentValueOffset := valuesBegin }
|
for { let currentValueOffset := valuesBegin }
|
||||||
lt(currentValueOffset, valuesEnd)
|
lt(currentValueOffset, valuesEnd)
|
||||||
@ -223,24 +226,25 @@ contract ERC1155Proxy is
|
|||||||
}
|
}
|
||||||
|
|
||||||
// There was no overflow, store the scaled token value
|
// There was no overflow, store the scaled token value
|
||||||
mstore(dataAreaPtr, currentValueScaled)
|
mstore(dataAreaEndOffset, currentValueScaled)
|
||||||
dataAreaPtr := add(dataAreaPtr, 32)
|
dataAreaEndOffset := add(dataAreaEndOffset, 32)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store pointer to `data` (Table #3)
|
// Store pointer to `data` (Table #3)
|
||||||
mstore(132, sub(dataAreaPtr, 4))
|
// Subtract 4 for `safeBatchTrasferFrom` selector
|
||||||
|
mstore(132, sub(dataAreaEndOffset, 4))
|
||||||
|
|
||||||
// Copy `data` from `assetData` (Table #2) to memory (Table #3)
|
// Copy `data` from `assetData` (Table #2) to memory (Table #3)
|
||||||
let offsetToData := add(offsetToParamsInAssetData, calldataload(add(assetDataOffset, 132)))
|
let dataOffset := add(paramsInAssetDataOffset, calldataload(add(assetDataOffset, 132)))
|
||||||
let dataLengthInBytes := calldataload(offsetToData)
|
let dataLengthInBytes := calldataload(dataOffset)
|
||||||
let dataLengthInWords := div(add(dataLengthInBytes, 31), 32)
|
let dataLengthInWords := div(add(dataLengthInBytes, 31), 32)
|
||||||
let dataLengthInBytesWordAligned := mul(dataLengthInWords, 32)
|
let dataLengthInBytesWordAligned := mul(dataLengthInWords, 32)
|
||||||
calldatacopy(
|
calldatacopy(
|
||||||
dataAreaPtr,
|
dataAreaEndOffset,
|
||||||
offsetToData,
|
dataOffset,
|
||||||
add(dataLengthInBytesWordAligned, 32)
|
add(dataLengthInBytesWordAligned, 32)
|
||||||
)
|
)
|
||||||
dataAreaPtr := add(dataAreaPtr, add(dataLengthInBytesWordAligned, 32))
|
dataAreaEndOffset := add(dataAreaEndOffset, add(dataLengthInBytesWordAligned, 32))
|
||||||
|
|
||||||
////////// STEP 3/3 - Execute Transfer //////////
|
////////// STEP 3/3 - Execute Transfer //////////
|
||||||
// Load the address of the destination erc1155 contract from asset data (Table #2)
|
// Load the address of the destination erc1155 contract from asset data (Table #2)
|
||||||
@ -257,7 +261,7 @@ contract ERC1155Proxy is
|
|||||||
assetAddress, // call address of erc1155 asset
|
assetAddress, // call address of erc1155 asset
|
||||||
0, // don't send any ETH
|
0, // don't send any ETH
|
||||||
0, // pointer to start of input
|
0, // pointer to start of input
|
||||||
dataAreaPtr, // length of input is the end of the Data Area (Table #3)
|
dataAreaEndOffset, // length of input is the end of the Data Area (Table #3)
|
||||||
0, // write output over memory that won't be reused
|
0, // write output over memory that won't be reused
|
||||||
0 // don't copy output to memory
|
0 // don't copy output to memory
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user