- 仅支持创建
ETH-Token
的交易对
- 同个交易池中只能进行
ETH/Token
的兑换
- 不同
Token
的兑换,需要不同交易池的参与
@public
def createExchange(token: address) -> address:
assert token != ZERO_ADDRESS
assert self.exchangeTemplate != ZERO_ADDRESS
// 当前Token未创建过交易池
assert self.token_to_exchange[token] == ZERO_ADDRESS
// 创建交易池
exchange: address = create_with_code_of(self.exchangeTemplate)
// 记录交易对合约地址
Exchange(exchange).setup(token)
self.token_to_exchange[token] = exchange
self.exchange_to_token[exchange] = token
token_id: uint256 = self.tokenCount + 1
self.tokenCount = token_id
self.id_to_token[token_id] = token
log.NewExchange(token, exchange)
return exchange
- 兑换池和
Token
绑定, 池子和 Token
双向映射
- 相同的代币只能创建一个池子
- 采用
new
关键字 create
新的池子合约
contract Factory {
mapping(address => address) tokenToExchange;
mapping(address => address) exchange_to_token;
function createExchange(address _token) public returns (address) {
require(_token != address(0), "Invalid token address");
require(
tokenToExchange[_token] == address(0),
"Exchange already registered."
);
Exchange exchange = new Exchange(_token);
tokenToExchange[_token] = address(exchange);
exchange_to_token[address(exchange)] = _token;
return address(exchange);
}
function getExchange(address _token) public view returns (address) {
return tokenToExchange[_token];
}
function getToken(address exchange) public view returns (address) {
return exchange_to_token[exchange];
}
}