The factory contract can perform creation of terraswap pair contract and also be used as directory contract for all pairs.
{
"pair_code_id": "123",
"token_code_id": "123",
"init_hook": {
"msg": "123",
"contract_addr": "terra..."
}
}
{
"update_config": {
"owner": "terra...",
"token_id": "123",
"pair_code_id": "123"
}
}
{
"create_pair": {
"asset_infos": [
{
"token": {
"contract_address": "terra..."
}
},
{
"native_token": {
"denom": "uusd"
}
}
]
}
}
{
"register": {
"asset_infos": [
{
"token": {
"contract_address": "terra..."
}
},
{
"native_token": {
"denom": "uusd"
}
}
]
}
}
{
"config": {}
}
{
"pair": {
"asset_infos": [
{
"token": {
"contract_address": "terra..."
}
},
{
"native_token": {
"denom": "uusd"
}
}
]
}
}
Register verified pair contract and token contract for pair contract creation. The sender will be the owner of the factory contract.
{
/// Pair contract code ID, which is used to
pub pair_code_id: u64,
pub token_code_id: u64,
pub init_hook: Option<InitHook>,
}
The factory contract owner can change relevant code IDs for future pair contract creation.
{
"update_config":
{
"owner": Option<HumanAddr>,
"pair_code_id": Option<u64>,
"token_code_id": Option<u64>,
}
}
When a user execute CreatePair
operation, it creates Pair
contract and LP(liquidity provider)
token contract. It also creates not fully initialized PairInfo
, which will be initialized with Register
operation from the pair contract's InitHook
.
{
"create_pair": {
"asset_infos": [
{
"token": {
"contract_addr": "terra1~~"
}
},
{
"native_token": {
"denom": "uusd"
}
}
]
}
}
When a user executes CreatePair
operation, it passes InitHook
to Pair
contract and Pair
contract will invoke passed InitHook
registering created Pair
contract to the factory. This operation is only allowed for a pair, which is not fully initialized.
Once a Pair
contract invokes it, the sender address is registered as Pair
contract address for the given asset_infos.
{ "register":
"asset_infos": [{
"token": {
"contract_addr": "terra1~~",
}
}, {
"native_token": {
"denom": "uusd",
}
}],
}