# web3py第二课:web3合约交互IFO **Published by:** [ourens.eth](https://paragraph.com/@ourens/) **Published on:** 2022-01-02 **URL:** https://paragraph.com/@ourens/web3py-web3-ifo ## Content 因为今天就要进行IFO,所以时间比较紧急。我这次只讲一下存入和取出的交互方法,会省略一些内容,这些会在以后再讲。必看首先我要说一点,这次IFO基本不会赚钱,只能让你回本一些,也不能完全回本。 我有一个朋友,参加了很多很多次IFO了,大约打了半年了吧,目前也才刚回本几期,才开始赚钱。所以参与的风险是极大的,我先把风险跟大家讲清楚。 IFO分为两个池子,大户池和阳光普照池,我们用脚本批量参与的就是阳光普照的池子。如果要参与IFO,你的地址必须要花1.5CAKE去设置一个头像,这个头像是个NFT,加入战队和起个名字。所以不算投入打新的100刀,你首先就要有每个地址1.5CAKE的成本。据我估计,参与一次IFO,这1.5CAKE都比较难赚回来。感觉要2期才能回本… 但是有很多已经回本的地址,这期还会参与,所以会越来越卷。而且一直传言要取消阳光普照这种分发方式,所以下一期可能你的多地址就直接废了,回本无望… 所以一定要想清楚,多地址打新不是稳赚的事情!千万别上头!了解这些再往下看。教程再强调一点哈,因为我之前也没参与过IFO,所以教程可能会有些错误,希望大家如果发现,及时告诉我。 虽然我没参与过,但是我请教了我一位常年打新的朋友,说一下流程。 一个崭新的地址,准备好CAKE和BNB,转账方法可以用我之前教过的代码来写,非常简单。 然后就是要花1.5CAKE去设置头像了,这里需要授权CAKE、生成头像、设置用户名、加入战队的操作。 这几步操作随时都可以做,不受时间限制,我希望你在网页上一步一步进行,每一步进行完毕之后,去查看区块链上的记录。 去看调用了哪个合约,哪个方法,参数是什么:你需要记录下每一步的操作,用代码去调用合约。下面用存入IFO的合约举例:可以看到,存入就是调用depositPool即可。代码如下:from web3 import Web3, HTTPProvider cake_address = # cake合约地址 cake_abi = # cake abi ifo_address = # ifo 合约地址 ifo_abi = # ifo abi ifo_cake_amount = # 投入cake数量 wallet_address = '' # 你的地址 private_key = '' # 你的私钥 rpc = 'https://bsc-dataseed1.binance.org:443' web3 = Web3(HTTPProvider(rpc)) address = Web3.toChecksumAddress(wallet_address) ifo_contract = web3.eth.contract(address=ifo_address, abi=ifo_abi) func = ifo_contract.functions.depositPool(web3.toWei(ifo_cake_amount, 'ether'), 0) nonce = web3.eth.getTransactionCount(wallet_address) params = { "from": wallet_address, "value": web3.toWei(0, 'ether'), 'gasPrice': web3.toWei(5, 'gwei'), "gas": 500000, "nonce": nonce, } try: tx = func.buildTransaction(params) signed_tx = web3.eth.account.sign_transaction(tx, private_key=private_key) tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction) print(f"交易发送成功:{tx_hash.hex()}") except Exception as e: print(f"{address}交易发送失败:", e) 这段代码感觉不用多解释,跟第一节课的转账十分类似,就是改了一下方法名。 记住,我们参与的池子ID是0即可!提取的方法大同小异:harvestPool(0) 。基本也是换个方法名就行! 你看到这里会发现,其实所有合约的交互,只要有合约地址、合约ABI、方法名和参数,就可以调用了。其实就是这样!之所以前面设置头像那些没讲,也是希望你们自己探索一下,看看遇到什么问题没有。 比如授权就是调用approve方法,传入授权合约地址和数量即可。如果要铸造NFT,就是调用mint方法。当然可能不同合约名字不一样,我们去区块链浏览器看一下即可。最后有了第一课的基础,再看第二课就觉得比较简单。一定要看全哦~ 因为今天时间紧张,所以可能写的有些凌乱,如果遇到问题一定要在discord中问我! 还有就是任何投资都有风险,切勿盲目跟风,多思考! ## Publication Information - [ourens.eth](https://paragraph.com/@ourens/): Publication homepage - [All Posts](https://paragraph.com/@ourens/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@ourens): Subscribe to updates