OBRouter Reference
Functions
The swap function is the primary function interface for making swaps through Ooga Booga.
function swap(
swapTokenInfo memory tokenInfo,
bytes calldata pathDefinition,
address executor,
uint32 referralCode
) external payable returns (uint256 amountOut)
tokenInfo
swapTokenInfo
Specifies the inputs and outputs of the swap
pathDefinition
bytes
Encoded path parameters of the swap path
executor
address
External contract that will execute the path
referralCode
uint32
Referral code to note the source of the swap
Do not modify the calldata provided by the swap endpoint. It could lead to loss of funds. The calldata provided should allow direct execution on-chain.
The structure of the data returned is:
amountOut
uint256
Actual outputToken amount received from swap
The swapTokenInfo
struct looks like:
inputToken
address
Token starting the swap, the native token (BERA) is 0x0000000000000000000000000000000000000000
inputAmount
uint256
Amount of inputToken
to swap
outputToken
address
Token returning from swap, the native token (BERA) is 0x0000000000000000000000000000000000000000
outputQuote
uint256
Expected amount returned
outputMin
uint256
Minimum amount returned derived from slippage and quote
outputReceiver
address
The destination address to receive output tokens
Events
An event is emitted from any swaps carried out on OBRouter
:
event Swap(
address sender,
uint256 inputAmount,
address inputToken,
uint256 amountOut,
address outputToken,
int256 slippage,
uint32 referralCode
);
The structure of the data within the event emitted looks like this:
sender
address
Address that called the swap
inputAmount
uint256
Amount of inputTokens
used
inputToken
address
Token that started the swap. The native token (BERA) is 0x0000000000000000000000000000000000000000
amountOut
uint256
Actual amountOut transferred after potential fees
outputToken
address
Token that returned from the swap. The native token (BERA) is 0x0000000000000000000000000000000000000000
slippage
int256
The difference between the expected outputQuote
and actual amountOut
returned (slippage = amountOut - outputQuote
). When < 0
means negative slippage (swap returned less than expected) and > 0 positive slippage (swap returned more than expected)
referralCode
uint32
Used to identify the source of the swap
Errors
These are the errors that can occur:
0x71c4efed
SlippageExceeded(uint256,uint256)
amountOut
resulted lower than outputMin
during swap execution
0xfa463c69
SameTokenInAndOut(address)
Cannot provide same inputToken
and outputToken
0x6da58071
MinimumOutputGreaterThanQuote(uint256,uint256)
outputMin
is set greater than outputQuote
0xf067d762
MinimumOutputIsZero()
outputMin
is set to 0
0xdb4d141c
NativeDepositValueMismatch(uint256,uint256)
value
provided to function call does not match amountIn
provided when inputToken
is the native token
0x9996b315
AddressEmptyCode(address)
Calling a contract that has no bytecode
0xcd786059
AddressInsufficientBalance(address)
Attempting to send native token with insufficient balance
0xd93c0665
EnforcedPause()
Function can only be called when the contract is unpaused
0x8dfc202b
ExpectedPause()
Function can only be called when the contract is paused
0x1425ea42
FailedInnerCall()
A call to an address target failed. The target may have reverted.
0x79feaaea
InvalidNativeTransfer()
Native token transfer has failed
0x5274afe7
SafeERC20FailedOperation(address)
An operation with an ERC-20 token failed.
ABI
Finally, this is the ABI for OBRouter
:
[
{
"type": "constructor",
"inputs": [
{
"name": "_owner",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
},
{
"type": "function",
"name": "FEE_DENOM",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "REFERRAL_WITH_FEE_THRESHOLD",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "pause",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "paused",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "referralLookup",
"inputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [
{
"name": "referralFee",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "beneficiary",
"type": "address",
"internalType": "address"
},
{
"name": "registered",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "registerReferralCode",
"inputs": [
{
"name": "_referralCode",
"type": "uint32",
"internalType": "uint32"
},
{
"name": "_referralFee",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "_beneficiary",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "renounceOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "swap",
"inputs": [
{
"name": "tokenInfo",
"type": "tuple",
"internalType": "struct IOBRouter.swapTokenInfo",
"components": [
{
"name": "inputToken",
"type": "address",
"internalType": "address"
},
{
"name": "inputAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputToken",
"type": "address",
"internalType": "address"
},
{
"name": "outputQuote",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputMin",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputReceiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "pathDefinition",
"type": "bytes",
"internalType": "bytes"
},
{
"name": "executor",
"type": "address",
"internalType": "address"
},
{
"name": "referralCode",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"type": "function",
"name": "swapERC20Permit",
"inputs": [
{
"name": "permit",
"type": "tuple",
"internalType": "struct IOBRouter.erc20PermitInfo",
"components": [
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "v",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "r",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "s",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "tokenInfo",
"type": "tuple",
"internalType": "struct IOBRouter.swapTokenInfo",
"components": [
{
"name": "inputToken",
"type": "address",
"internalType": "address"
},
{
"name": "inputAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputToken",
"type": "address",
"internalType": "address"
},
{
"name": "outputQuote",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputMin",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputReceiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "pathDefinition",
"type": "bytes",
"internalType": "bytes"
},
{
"name": "executor",
"type": "address",
"internalType": "address"
},
{
"name": "referralCode",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "swapPermit2",
"inputs": [
{
"name": "permit2",
"type": "tuple",
"internalType": "struct IOBRouter.permit2Info",
"components": [
{
"name": "contractAddress",
"type": "address",
"internalType": "address"
},
{
"name": "nonce",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "signature",
"type": "bytes",
"internalType": "bytes"
}
]
},
{
"name": "tokenInfo",
"type": "tuple",
"internalType": "struct IOBRouter.swapTokenInfo",
"components": [
{
"name": "inputToken",
"type": "address",
"internalType": "address"
},
{
"name": "inputAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputToken",
"type": "address",
"internalType": "address"
},
{
"name": "outputQuote",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputMin",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputReceiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "pathDefinition",
"type": "bytes",
"internalType": "bytes"
},
{
"name": "executor",
"type": "address",
"internalType": "address"
},
{
"name": "referralCode",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferOwnership",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferRouterFunds",
"inputs": [
{
"name": "tokens",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "amounts",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "dest",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "unpaused",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "OwnershipTransferred",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Paused",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Swap",
"inputs": [
{
"name": "sender",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "inputAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "inputToken",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "amountOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "outputToken",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "slippage",
"type": "int256",
"indexed": false,
"internalType": "int256"
},
{
"name": "referralCode",
"type": "uint32",
"indexed": false,
"internalType": "uint32"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Unpaused",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "error",
"name": "AddressEmptyCode",
"inputs": [
{
"name": "target",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "AddressInsufficientBalance",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "EnforcedPause",
"inputs": []
},
{
"type": "error",
"name": "ExpectedPause",
"inputs": []
},
{
"type": "error",
"name": "FailedInnerCall",
"inputs": []
},
{
"type": "error",
"name": "FeeTooHigh",
"inputs": [
{
"name": "fee",
"type": "uint64",
"internalType": "uint64"
}
]
},
{
"type": "error",
"name": "InvalidFeeForCode",
"inputs": [
{
"name": "fee",
"type": "uint64",
"internalType": "uint64"
}
]
},
{
"type": "error",
"name": "InvalidNativeTransfer",
"inputs": []
},
{
"type": "error",
"name": "InvalidRouterFundsTransfer",
"inputs": []
},
{
"type": "error",
"name": "MinimumOutputGreaterThanQuote",
"inputs": [
{
"name": "outputMin",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputQuote",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "MinimumOutputIsZero",
"inputs": []
},
{
"type": "error",
"name": "NativeDepositValueMismatch",
"inputs": [
{
"name": "expected",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "received",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "NullBeneficiary",
"inputs": []
},
{
"type": "error",
"name": "OwnableInvalidOwner",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "OwnableUnauthorizedAccount",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "ReferralCodeInUse",
"inputs": [
{
"name": "referralCode",
"type": "uint32",
"internalType": "uint32"
}
]
},
{
"type": "error",
"name": "SafeERC20FailedOperation",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "SameTokenInAndOut",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "SlippageExceeded",
"inputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "outputMin",
"type": "uint256",
"internalType": "uint256"
}
]
}
]
Last updated