人工智能技术是智能工业时代的核心技术之一。人工智能技术包括机器学习、深度学习、自然语言处理、计算机视觉等。这些技术的应用使得机器能够自主地学习、理解和判断,可以帮助工业企业实现自动化、智能化和高效化的生产和管理。
#notice Convert ETH to Tokens.
#dev User specifies exact input(msg.value).
#dev User cannot specify minimum output or deadline.
#用ETH兑换代币的默认函数,用户只需要指定输入的ETH的数量
public案例开发I35模式7O98系统O7I8
payable
def default():
self.ethToTokenInput(msg.value,1,block.timestamp,msg.sender,msg.sender)
关于区块链项目技术开发唯:MrsFu123,代币发行、dapp智能合约开发、链游开发、多链钱包开发
交易所开发、量化合约开发、互助游戏开发、Nft数字藏品开发、众筹互助开发、元宇宙开发、swap开发、
链上合约开发、ido开发、商城开发等,开发过各种各样的系统模式,更有多种模式、制度、案例、后台等,成熟技术团队,欢迎实体参考。
#notice Convert ETH to Tokens.
#dev User specifies exact input(msg.value)and minimum output.所以接收的代币最小值
#param min_tokens Minimum Tokens bought.
#param deadline Time after which this transaction can no longer be executed.
#return Amount of Tokens bought.
#ETH通过msg.value的方式发送给代币合约,代币合约根据所接收到的ETH计算所需支付的代币
public
payable
def ethToTokenSwapInput(min_tokens:uint256,deadline:timestamp)->uint256:
return self.ethToTokenInput(msg.value,min_tokens,deadline,msg.sender,msg.sender)
#notice Convert ETH to Tokens and transfers Tokens to recipient.
#dev User specifies exact input(msg.value)and minimum output
#param min_tokens Minimum Tokens bought.
#param deadline Time after which this transaction can no longer be executed.
#param recipient The address that receives output Tokens.
#return Amount of Tokens bought.
public
payable
def ethToTokenTransferInput(min_tokens:uint256,deadline:timestamp,recipient:address)->uint256:
assert recipient!=self and recipient!=ZERO_ADDRESS
return self.ethToTokenInput(msg.value,min_tokens,deadline,msg.sender,recipient)
#notice Convert ETH to Tokens.
#dev User specifies maximum input(msg.value)and exact output.
#param tokens_bought Amount of tokens bought.
#param deadline Time after which this transaction can no longer be executed.
#return Amount of ETH sold.
public
payable
def ethToTokenSwapOutput(tokens_bought:uint256,deadline:timestamp)->uint256(wei):
return self.ethToTokenOutput(tokens_bought,msg.value,deadline,msg.sender,msg.sender)
#notice Convert ETH to Tokens and transfers Tokens to recipient.
#dev User specifies maximum input(msg.value)and exact output.
#param tokens_bought Amount of tokens bought.
#param deadline Time after which this transaction can no longer be executed.
#param recipient The address that receives output Tokens.
#return Amount of ETH sold.
public
payable
def ethToTokenTransferOutput(tokens_bought:uint256,deadline:timestamp,recipient:address)->uint256(wei):
assert recipient!=self and recipient!=ZERO_ADDRESS
return self.ethToTokenOutput(tokens_bought,msg.value,deadline,msg.sender,recipient)
private
def ethToTokenInput(eth_sold:uint256(wei),min_tokens:uint256,deadline:timestamp,buyer:address,recipient:address)->uint256:
assert deadline>=block.timestamp and(eth_sold>0 and min_tokens>0)
token_reserve:uint256=self.token.balanceOf(self)#获取代币储备量
#用getInputPrice获得所购买得到的代币数量
#因为交易是先转账再执行合约,所以获得ETH储备量的时候需要先减去该买者已经发送的ETH
tokens_bought:uint256=self.getInputPrice(as_unitless_number(eth_sold),as_unitless_number(self.balance-eth_sold),token_reserve)
assert tokens_bought>=min_tokens
assert self.token.transfer(recipient,tokens_bought)#向接收者发送代币
log.TokenPurchase(buyer,eth_sold,tokens_bought)
return tokens_bought
private
def ethToTokenOutput(tokens_bought:uint256,max_eth:uint256(wei),deadline:timestamp,buyer:address,recipient:address)->uint256(wei):
assert deadline>=block.timestamp and(tokens_bought>0 and max_eth>0)
token_reserve:uint256=self.token.balanceOf(self)#获取代币储备
#用getOutputPrice获得所需支付的ETH数量
#因为交易是先转账再执行合约代码,所以调用该合约时ETH已经转到兑换合约中,
#而入口函数会直接将msg.value作为max_eth传入,所以ETH储备量为self.balance-max_eth
eth_sold:uint256=self.getOutputPrice(tokens_bought,as_unitless_number(self.balance-max_eth),token_reserve)
#Throws if eth_sold>max_eth
#计算需要退还给用户的ETH
eth_refund:uint256(wei)=max_eth-as_wei_value(eth_sold,'wei')
if eth_refund>0:
send(buyer,eth_refund)#如果需要退还的ETH大于0,转账。
assert self.token.transfer(recipient,tokens_bought)#向用户发送代币
log.TokenPurchase(buyer,as_wei_value(eth_sold,'wei'),tokens_bought)
return as_wei_value(eth_sold,'wei')