PMM RFQ Smart Contract
Contract Address
0xbbbbbBB520d69a9775E85b458C58c648259FAD5F
The address is the same on all supported networks
Contract Description and Functions for takers
Bebop smart contract enables settlement (token transfers) between users and market makers.
Different functions for swap are used depending on the number of tokens and the number of makers participating in the trade. Quote response in API has the field onchainOrderType
which indicates the type of the order: SingleOrder
, MultiOrder
or AggregateOrder
SingleOrder
SingleOrder - One-to-One trade with one maker
/// @notice Struct for one-to-one trade with one maker
struct Single {
uint256 expiry;
address taker_address;
address maker_address;
uint256 maker_nonce;
address taker_token;
address maker_token;
uint256 taker_amount;
uint256 maker_amount;
address receiver;
uint256 packed_commands;
uint256 flags; // `hashSingleOrder` doesn't use this field for SingleOrder hash
}
/// @param order Single order struct
/// @param makerSignature Maker's signature for SingleOrder
/// @param filledTakerAmount Partially filled taker amount, 0 for full fill
function swapSingle(
Order.Single calldata order,
Signature.MakerSignature calldata makerSignature,
uint256 filledTakerAmount
) external payable;
Another function for SingleOrder is not returned from our API, however it can be used as an optimization for specific cases:
/// Using current contract's balance of taker_token as partial fill amount
/// @param order Single order struct
/// @param makerSignature Maker's signature for SingleOrder
function swapSingleFromContract(
Order.Single calldata order,
Signature.MakerSignature calldata makerSignature
) external payable;
MultiOrder
MultiOrder - Many-to-One or One-to-Many trade with one maker
/// @notice Struct for many-to-one or one-to-many trade with one maker
/// Also this struct is used as maker order which is part of AggregateOrder
struct Multi {
uint256 expiry;
address taker_address;
address maker_address;
uint256 maker_nonce;
address[] taker_tokens;
address[] maker_tokens;
uint256[] taker_amounts;
uint256[] maker_amounts;
address receiver;
bytes commands;
uint256 flags; // `hashMultiOrder` doesn't use this field for MultiOrder hash
}
/// @param order Multi order struct
/// @param makerSignature Maker's signature for MultiOrder
/// @param filledTakerAmount Partially filled taker amount, 0 for full fill. Many-to-one doesnt support partial fill
function swapMulti(
Order.Multi calldata order,
Signature.MakerSignature calldata makerSignature,
uint256 filledTakerAmount
) external payable;
AggregateOrder
AggregateOrder - any trade with multiple makers
/// @notice Struct for any trade with multiple makers
struct Aggregate {
uint256 expiry;
address taker_address;
address[] maker_addresses;
uint256[] maker_nonces;
address[][] taker_tokens;
address[][] maker_tokens;
uint256[][] taker_amounts;
uint256[][] maker_amounts;
address receiver;
bytes commands;
uint256 flags; // `hashAggregateOrder` doesn't use this field for AggregateOrder hash
}
/// @param order Aggregate order struct
/// @param makersSignatures Makers signatures for MultiOrder (MultiOrder can be contructed as part of current AggregateOrder)
/// @param filledTakerAmount Partially filled taker amount, 0 for full fill. Many-to-one doesnt support partial fill
function swapAggregate(
Order.Aggregate calldata order,
Signature.MakerSignature[] calldata makersSignatures,
uint256 filledTakerAmount
) external payable;
Errors
OrderInvalidSigner
0x7212c4e5
InvalidEIP712Signature
0xbe109cb3
InvalidEIP1271Signature
0x5d52cbe3
InvalidETHSIGNSignature
0x23b425da
InvalidSignatureType
0x60cd402d
InvalidSignatureLength
0x4be6321b
InvalidSignatureValueS
0x1a5bf8ec
InvalidSignatureValueV
0xf5d7a23b
ZeroNonce
0x150b14ee
InvalidNonce
0x756688fe
OrderExpired
0xc56873ba
OrdersLengthsMismatch
0x79b39097
TokensLengthsMismatch
0xd13482e8
CommandsLengthsMismatch
0x518b8015
InvalidPermit2Commands
0xfefbfd16
InvalidCommand
0x12f269e5
InvalidCommandsLength
0x0386f034
InvalidFlags
0x89702c9b
PartialFillNotSupported
0x7d617bb3
UpdatedMakerAmountsTooLow
0x711dbe4a
ZeroMakerAmount
0xb2f300d0
MakerAmountsLengthsMismatch
0x9143869a
NotEnoughNativeToken
0xf6ed5e01
WrongWrappedTokenAddress
0x1ede9e1a
FailedToSendNativeToken
0xd1a4579f
InvalidSender
0xddb5de5e
ManyToManyNotSupported
0xffc7ec8d
InvalidPendingTransfersLength
0xc37a5663
InvalidPermit2TransfersLength
0xd224c1c8
PartnerAlreadyRegistered
0xd6fc122c
PartnerFeeTooHigh
0x53ac0400
NullBeneficiary
0xcf260806
Last updated