数字经济是以数据资源为关键要素,以数字科技为支撑的经济形态。数字产业化和产业数字化是数字经济中的重点内容,数字产业化主要是推动数字科技形成规模化产业,产业数字化主要是利用数字科技支撑和推动传统产业转型升级。在这个过程中可以基于区块链等数字科技推动信息技术服务加速数字产业化,依托元宇宙的新场景拉动信息消费促进产业数字化。
面向对象的风格,Token类,实例化对象后可以调用其中的成员方法,以下是主要的几个方法:
1.price()
def price(self,amount=int(1e18),swap_token_address=ETH_ADDRESS):
swap_token_address=Web3.toChecksumAddress(swap_token_address)
return self.router.functions.getAmountsOut(amount,[self.address,swap_token_address]).call()[-1]
传入的参数分别是想要交易的数量与想要获得的代币地址(默认是eth地址)。
可以理解为返回指定数量的代币价值。
2.received_amount_by_swap()
def received_amount_by_swap(self,input_token_amount=int(1e18),input_token_address=ETH_ADDRESS):
input_token_address=Web3.toChecksumAddress(input_token_address)
return self.router.functions.getAmountsOut(input_token_amount,[input_token_address,self.address]).call()[-1]
可以理解为用指定数量的其他代币换取该代币,返回能换得该代币的数量。
3.buy()
def buy(self,consumed_token_amount,consumed_token_address=ETH_ADDRESS,slippage=0.01,timeout=900,speed=1):
gas_price=int(self.web3.eth.gasPrice*speed)
consumed_token_address=Web3.toChecksumAddress(consumed_token_address)
received_amount=self.received_amount_by_swap(consumed_token_amount,consumed_token_address)
min_out=int(received_amount*(1-slippage))
if consumed_token_address==self.ETH_ADDRESS:
func=self.router.functions.swapExactETHForTokens(min_out,[consumed_token_address,self.address],
self.wallet_address,int(time.time()+timeout))
params=self.create_transaction_params(value=consumed_token_amount,gas_price=gas_price)
else:
if not self.is_approved(consumed_token_address,consumed_token_amount):
self.approve(consumed_token_address,gas_price=gas_price,timeout=timeout)
func=self.router.functions.swapExactTokensForTokens(consumed_token_amount,min_out,
[consumed_token_address,self.address],
self.wallet_address,int(time.time()+timeout))
params=self.create_transaction_params(gas_price=gas_price)
return self.send_transaction(func,params)
一共有5个参数:
consumed_token_address:设置所支付的代币的erc20合约地址。
consumed_token_amount:设置所支付的代币数量。
slippage:设置所能容忍的滑点,默认为百分之一。
timeout:设置该笔交易的超时时间。
speed:设置该笔交易的区块确认速度,通过平均的gas_price乘以speed设置该笔交易的gas_price,所以speed的值越大,gas_price也越大,使得该笔交易的确认速度也越快。