TokenMarketNet智能合约交互指南:从部署到操作全流程

TokenMarketNet智能合约交互指南:从部署到操作全流程

【免费下载链接】smart-contracts Ethereum smart contracts for security and utility tokens 【免费下载链接】smart-contracts 项目地址: https://gitcode.com/gh_mirrors/smar/smart-contracts

前言

本文将详细介绍如何与TokenMarketNet智能合约项目进行交互,涵盖从基础环境搭建到高级功能操作的完整流程。作为区块链开发者或项目运营者,掌握这些交互技能对于管理代币发行、资金募集等关键业务至关重要。

环境准备

Jupyter Notebook配置

与智能合约交互最便捷的方式是通过Jupyter Notebook,它提供了交互式编程环境:

  1. 安装Jupyter Notebook:
pip install jupyter
  1. 启动Notebook服务:
jupyter notebook

环境配置完成后,所有代码片段将通过populus.json中配置的JSON RPC提供程序连接到区块链节点。

基础操作

代币转账

以下是执行ERC20代币转账的完整示例:

from decimal import Decimal
import populus
from populus.utils.accounts import is_account_locked
from populus.utils.cli import request_account_unlock
from eth_utils import from_wei
from ico.utils import check_succesful_tx, get_contract_by_name

# 配置参数
chain_name = "mainnet"
owner_address = "0x..."  # 所有者地址
contract_address = "0x..."  # 代币合约地址
receiver = "0x..."  # 接收方地址
amount = Decimal("1.0")  # 转账数量

project = populus.Project()

with project.get_chain(chain_name) as chain:
    web3 = chain.web3
    print(f"当前网络: {web3.providers[0]}")
    print(f"所有者余额: {from_wei(web3.eth.getBalance(owner_address), 'ether')} ETH")
    
    # 解锁账户(如果需要)
    if is_account_locked(web3, owner_address):
        request_account_unlock(chain, owner_address, None)
    
    # 获取代币合约实例
    FractionalERC20 = get_contract_by_name(chain, "FractionalERC20")
    token = FractionalERC20(address=contract_address)
    
    # 处理小数位数
    decimals = token.call().decimals()
    decimal_multiplier = 10 ** decimals
    normalized_amount = int(amount * decimal_multiplier)
    
    # 执行转账
    txid = token.transact({"from": owner_address}).transfer(receiver, normalized_amount)
    check_succesful_tx(web3, txid)
    print(f"转账成功! 交易ID: {txid}")

代币释放

对于有转账锁定期限的众筹代币,需要释放后才能自由转账:

import populus
from populus.utils.accounts import is_account_locked
from populus.utils.cli import request_account_unlock
from ico.utils import check_succesful_tx, get_contract_by_name

# 配置参数
chain_name = "ropsten"
owner_address = "0x..."  # 释放代理地址
contract_address = "0x..."  # 代币合约地址

project = populus.Project()

with project.get_chain(chain_name) as chain:
    web3 = chain.web3
    
    # 解锁账户
    if is_account_locked(web3, owner_address):
        request_account_unlock(chain, owner_address, None)
    
    # 获取合约实例并执行释放
    Contract = get_contract_by_name(chain, "CrowdsaleToken")
    contract = Contract(address=contract_address)
    
    txid = contract.transact({"from": owner_address}).releaseTokenTransfer()
    check_succesful_tx(web3, txid)
    print("代币转账功能已成功释放!")

高级功能

预售合约配置

将预售合约与主众筹合约关联:

from ico.utils import check_succesful_tx, get_contract_by_name
import populus
from populus.utils.accounts import is_account_locked

# 配置参数
account = "0x..."  # 控制账户
presale_address = "0x..."  # 预售合约地址
crowdsale_address = "0x..."  # 众筹合约地址

p = populus.Project()

with p.get_chain("mainnet") as chain:
    web3 = chain.web3
    
    # 获取预售合约实例
    Contract = get_contract_by_name(chain, "PresaleFundCollector")
    contract = Contract(address=presale_address)
    
    # 设置众筹合约地址
    txid = contract.transact({"from": account}).setCrowdsale(crowdsale_address)
    check_succesful_tx(web3, txid)
    print("预售合约配置完成!")

白名单管理

在众筹开始前设置白名单参与者:

from ico.utils import check_succesful_tx, get_contract_by_name
import populus
from populus.utils.accounts import is_account_locked

# 配置参数
account = "0x..."  # 控制账户
crowdsale_address = "0x..."  # 众筹合约地址
participant_address = "0x..."  # 参与者地址

p = populus.Project()

with p.get_chain("kovan") as chain:
    web3 = chain.web3
    
    # 获取众筹合约实例
    Contract = get_contract_by_name(chain, "Crowdsale")
    contract = Contract(address=crowdsale_address)
    
    # 添加白名单
    txid = contract.transact({"from": account}).setEarlyParicipantWhitelist(participant_address, True)
    check_succesful_tx(web3, txid)
    print("白名单设置成功!")

最佳实践

测试购买代币

在实际环境部署前,建议在测试网进行购买测试:

from ico.utils import check_succesful_tx, get_contract_by_name
import populus
from populus.utils.accounts import is_account_locked
from eth_utils import to_wei
import uuid

# 配置参数
account = "0x..."  # 测试账户
crowdsale_address = "0x..."  # 众筹合约地址
investment_amount = 2  # 投资金额(ETH)

p = populus.Project()

with p.get_chain("kovan") as chain:
    web3 = chain.web3
    
    # 生成唯一客户ID
    customer_id = int(uuid.uuid4().hex, 16)  # 128位UUID v4
    
    # 执行测试购买
    Contract = get_contract_by_name(chain, "Crowdsale")
    contract = Contract(address=crowdsale_address)
    
    txid = contract.transact({
        "from": account, 
        "value": to_wei(investment_amount, "ether")
    }).buy()
    
    check_succesful_tx(web3, txid)
    print("测试购买成功完成!")

停止支付转发器

众筹结束后,应及时停止支付转发器:

from ico.utils import check_succesful_tx, get_contract_by_name
import populus
from populus.utils.accounts import is_account_locked

# 配置参数
account = "0x..."  # 控制账户
forwarder_address = "0x..."  # 支付转发器地址

p = populus.Project()

with p.get_chain("mainnet") as chain:
    web3 = chain.web3
    
    # 获取转发器实例
    Contract = get_contract_by_name(chain, "PaymentForwarder")
    contract = Contract(address=forwarder_address)
    
    # 提高gas价格确保交易快速执行
    initial_gas_price = web3.eth.gasPrice
    txid = contract.transact({
        "from": account, 
        "gasPrice": initial_gas_price*5
    }).halt()
    
    check_succesful_tx(web3, txid)
    print("支付转发器已成功停止!")

总结

本文详细介绍了TokenMarketNet智能合约项目的各种交互场景,从基础的代币转账到复杂的众筹管理功能。掌握这些操作对于区块链项目的实际运营至关重要。建议在实际操作前充分理解每项功能的影响,并在测试网进行充分验证后再部署到主网。

【免费下载链接】smart-contracts Ethereum smart contracts for security and utility tokens 【免费下载链接】smart-contracts 项目地址: https://gitcode.com/gh_mirrors/smar/smart-contracts

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值