###### tags: `SAIGATE`
# ContractShare
## atomicmatch_
購入操作の際にユーザーが呼び出すコントラクト。
Orderという構造が定義されており、これらを購入者と出品者が作成する。
その値を関数の引数として渡す。
### 該当部分 ソースコード
/**
* @dev Call atomicMatch - Solidity ABI encoding limitation workaround, hopefully temporary.
*/
function atomicMatch_(
address[14] addrs,
uint[18] uints,
uint8[8] feeMethodsSidesKindsHowToCalls,
bytes calldataBuy,
bytes calldataSell,
bytes replacementPatternBuy,
bytes replacementPatternSell,
bytes staticExtradataBuy,
bytes staticExtradataSell,
uint8[2] vs,
bytes32[5] rssMetadata)
public
payable
{
return atomicMatch(
Order(addrs[0], addrs[1], addrs[2], uints[0], uints[1], uints[2], uints[3], addrs[3], FeeMethod(feeMethodsSidesKindsHowToCalls[0]), SaleKindInterface.Side(feeMethodsSidesKindsHowToCalls[1]), SaleKindInterface.SaleKind(feeMethodsSidesKindsHowToCalls[2]), addrs[4], AuthenticatedProxy.HowToCall(feeMethodsSidesKindsHowToCalls[3]), calldataBuy, replacementPatternBuy, addrs[5], staticExtradataBuy, ERC20(addrs[6]), uints[4], uints[5], uints[6], uints[7], uints[8]),
Sig(vs[0], rssMetadata[0], rssMetadata[1]),
Order(addrs[7], addrs[8], addrs[9], uints[9], uints[10], uints[11], uints[12], addrs[10], FeeMethod(feeMethodsSidesKindsHowToCalls[4]), SaleKindInterface.Side(feeMethodsSidesKindsHowToCalls[5]), SaleKindInterface.SaleKind(feeMethodsSidesKindsHowToCalls[6]), addrs[11], AuthenticatedProxy.HowToCall(feeMethodsSidesKindsHowToCalls[7]), calldataSell, replacementPatternSell, addrs[12], staticExtradataSell, ERC20(addrs[13]), uints[13], uints[14], uints[15], uints[16], uints[17]),
Sig(vs[1], rssMetadata[2], rssMetadata[3]),
rssMetadata[4]
);
}
}
### Order 構造体
/* An order on the exchange. */
struct Order {
/* Exchange address, intended as a versioning mechanism. */
address exchange;
/* Order maker address. */
address maker;
/* Order taker address, if specified. */
address taker;
/* Maker relayer fee of the order, unused for taker order. */
uint makerRelayerFee;
/* Taker relayer fee of the order, or maximum taker fee for a taker order. */
uint takerRelayerFee;
/* Maker protocol fee of the order, unused for taker order. */
uint makerProtocolFee;
/* Taker protocol fee of the order, or maximum taker fee for a taker order. */
uint takerProtocolFee;
/* Order fee recipient or zero address for taker order. */
address feeRecipient;
/* Fee method (protocol token or split fee). */
FeeMethod feeMethod;
/* Side (buy/sell). */
SaleKindInterface.Side side;
/* Kind of sale. */
SaleKindInterface.SaleKind saleKind;
/* Target. */
address target;
/* HowToCall. */
AuthenticatedProxy.HowToCall howToCall;
/* Calldata. */
bytes calldata;
/* Calldata replacement pattern, or an empty byte array for no replacement. */
bytes replacementPattern;
/* Static call target, zero-address for no static call. */
address staticTarget;
/* Static call extra data. */
bytes staticExtradata;
/* Token used to pay for the order, or the zero-address as a sentinel value for Ether. */
address paymentToken;
/* Base price of the order (in paymentTokens). */
uint basePrice;
/* Auction extra parameter - minimum bid increment for English auctions, starting/ending price difference. */
uint extra;
/* Listing timestamp. */
uint listingTime;
/* Expiration timestamp - 0 for no expiry. */
uint expirationTime;
/* Order salt, used to prevent duplicate hashes. */
uint salt;
}
### Sellorderサンプル(売り手が作成するOrder)
. basePrice: "1000000000000000" //販売価格(ETH)
. calldata: "0x23b872dd000000000000000000000000e6b48d76bc4805abf61f38a55f1d7c362c8bfda800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
. exchange: "0x5206e78b21ce315ce284fb24cf05e0585a93b1d9"
.
expirationTime: "0"
. extra: "0"
. feeMethod: 1
. feeRecipient: "0x5b3256965e7c3cf26e11fcaf296dfc8807c01073"
. hash: "0xb4fc308f42aa95eb42e5f54fd133c73554517908938708bfa10b5b190849e900"
. howToCall: 0
. listingTime: "1625391765"
. maker: "0xe6b48d76bc4805abf61f38a55f1d7c362c8bfda8"
. makerProtocolFee: "0"
. makerReferrerFee: "0"
. makerRelayerFee: "250"
. metadata: {asset: {id: "1", address: "0x6a55df8080c8cef5ae2d941356792fa925fdefea"}, schema: "ERC721"}
. paymentToken: "0x0000000000000000000000000000000000000000"
. quantity: "1"
. r: "0x3533205369ab9c22035830bd94ee2fc62474bb6fa343d458a8adfb45fc27ee21"
. replacementPattern: "0x000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000"
. s: "0x5e4923851c46b5d720ca4098ce7ed62d977db6458f66c4c91a8f65fe4db7e2d0"
. saleKind: 0
. salt: "39105810472022714477231934228712424453123455914673974930876616049220543647209"
. side: 1
. staticExtradata: "0x"
. staticTarget: "0x0000000000000000000000000000000000000000"
. taker: "0x0000000000000000000000000000000000000000"
. takerProtocolFee: "0"
. takerRelayerFee: "0"
. target: "0x6a55df8080c8cef5ae2d941356792fa925fdefea"
. v: 27
### 関数引数サンプル
| # | Name | Type | Data |
| --- | ------------------------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 | addrs | address[14] | 0x5206e78b21Ce315ce284FB24cf05e0585A93B1d9 |
| | | | 0x213EA17dedD80488b8E3a4a6F317835F44EeE5cc |
| | | | 0xE6b48d76Bc4805ABF61F38A55F1D7C362c8BfdA8 |
| | | | 0x0000000000000000000000000000000000000000 |
| | | | 0x6a55DF8080c8cef5AE2D941356792fa925fDeFea |
| | | | 0x0000000000000000000000000000000000000000 |
| | | | 0x0000000000000000000000000000000000000000 |
| | | | 0x5206e78b21Ce315ce284FB24cf05e0585A93B1d9 |
| | | | 0xE6b48d76Bc4805ABF61F38A55F1D7C362c8BfdA8 |
| | | | 0x0000000000000000000000000000000000000000 |
| | | | 0x5b3256965e7C3cF26E11FCAf296DfC8807C01073 |
| | | | 0x6a55DF8080c8cef5AE2D941356792fa925fDeFea |
| | | | 0x0000000000000000000000000000000000000000 |
| | | | 0x0000000000000000000000000000000000000000 |
| 1 | uints | uint256[18] | 250 |
| | | | 0 |
| | | | 0 |
| | | | 0 |
| | | | 1000000000000000 |
| | | | 0 |
| | | | 1625392183 |
| | | | 0 |
| | | | 53040662544980506073439903767694118150761240001752535246044738625543501304858 |
| | | | 256 |
| | | | 0 |
| | | | 0 |
| | | | 0 |
| | | | 100000000000000 |
| | | | 0 |
| | | | 1625391765 |
| | | | 0 |
| | | | 39105810472022714477231934228712424453123455914673974930876616049220543647209 |
| 2 | feeMethodsSidesKindsHowToCalls | uint8[8] | 1 |
| | | | 0 |
| | | | 0 |
| | | | 0 |
| | | | 1 |
| | | | 1 |
| | | | 0 |
| | | | 0 |
| 3 | calldataBuy | bytes | 0x23b872dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000213ea17dedd80488b8e3a4a6f317835f44eee5cc0000000000000000000000000000000000000000000000000000000000000001 |
| 4 | calldataSell | bytes | 0x23b872dd000000000000000000000000e6b48d76bc4805abf61f38a55f1d7c362c8bfda800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 |
| 5 | replacementPatternBuy | bytes | 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
| 6 | replacementPatternSell | bytes | 0x000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000 |
| 7 | staticExtradataBuy | bytes | |
| 8 | staticExtradataSell | bytes | |
| 9 | vs | uint8[2] | 27 |
| | | | 27 |
| 10 | rssMetadata | bytes32[5] | 0x3533205369ab9c22035830bd94ee2fc62474bb6fa343d458a8adfb45fc27ee21 |
| | | | 0x5e4923851c46b5d720ca4098ce7ed62d977db6458f66c4c91a8f65fe4db7e2d0 |
| | | | 0x3533205369ab9c22035830bd94ee2fc62474bb6fa343d458a8adfb45fc27ee21 |
| | | |0x5e4923851c46b5d720ca4098ce7ed62d977db6458f66c4c91a8f65fe4db7e2d0|
| | | |0x0000000000000000000000000000000000000000000000000000000000000000|