web3py第一课:web3合约交互基础部分
这一篇是正式建立DFarm DAO以来的第一篇文章了,本来这周不准备分享。但是感觉基础的一些知识可以先讲,大家先熟悉一下,所以今天就分享一下web3py跟智能合约交互的一些基础知识。 这部分都是非常简单的代码,希望大家尝试一下。安装python、pycharm这些环境和开发工具大家自行安装即可,网上一搜都是教程,比我写的好很多,这部分内容不再赘述。 web3py文档: https://web3py.readthedocs.io/en/stable/index.html web3py应该是python上跟智能合约交互最好用的包了,首先我们安装一下。 如果你是mac系统,直接使用:`pip install web3` 进行安装。 如果你是windows系统,则需要先装一下c++环境。 下载 vs_buildtools: https://visualstudio.microsoft.com/zh-hant/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16 之后如图安装下面勾选的包,一定要装全,已包含和可选两部分你都要装...
Quarter I 2022
原文作者:Ansem(推特@blknoiz06) 原文链接: https://blknoiz06.substack.com/p/quarter-i-2022?token=eyJ1c2VyX2lkIjoxNTEzODUxLCJwb3N0X2lkIjo0NDk3NTUwMywiXyI6Impza3RSIiwiaWF0IjoxNjQxMDAyOTU4LCJleHAiOjE2NDEwMDY1NTgsImlzcyI6InB1Yi0zNDg4NDgiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.Cqy5UR9NIQI5frgMTGectMzDdH_0CF2RZHRcrmNejs4 译者:Evelyn、AluAyi、Henson、Rex|W3.Hitchhiker2022市场整体展望你好!对于我的堕落同胞(fellow degenerates)和其他不知何故闯入这个页面的读者们,我将尝试在这里梳理今年一季度的一些想法。这是我第二次写这样的长篇大论,所以请忍耐一下(哈哈),希望它比从我推特发出来的数百条零零散散的推文更有条理。 2021年对于加密资产来说很显然是突破性的一年,从...
zecrey测试网测试交互教程 — Mirror
介绍Zecrey是L2 基于zk-rollup的协议,它可以带来交链隐私到多链生态,以减轻隐私保护和生态隔离的困境中加密的世界。Zecrey 的使命是为数字资产带来跨链隐私。 1月1日官方新鲜出炉的测试公告:官推: https://twitter.com/zecreyprotocol交互吧勇士1、安装Zecrey Chrome扩展钱包 https://chrome.google.com/webstore/detail/zecrey/ojbpcbinjmochkhelkflddfnmcceomdi 安装,创建钱包,保存好助记词~~2、领水 先打开网站领水~~(下面有惊吓) https://faucet.zecrey.com/点击Connect Wallet,链接钱包 这里提供了Rinkeby、Polygon、Aurora、Avax、Bsc的测试水龙头,都给他领了~~~ 尴尬的是你没钱来领这个水,所以先去解决水龙头问题: 方法如下: 1>获得zecrey的Private Key(Account Details ->Export Private Key),然后在小狐狸中Import A...
web3py第一课:web3合约交互基础部分
这一篇是正式建立DFarm DAO以来的第一篇文章了,本来这周不准备分享。但是感觉基础的一些知识可以先讲,大家先熟悉一下,所以今天就分享一下web3py跟智能合约交互的一些基础知识。 这部分都是非常简单的代码,希望大家尝试一下。安装python、pycharm这些环境和开发工具大家自行安装即可,网上一搜都是教程,比我写的好很多,这部分内容不再赘述。 web3py文档: https://web3py.readthedocs.io/en/stable/index.html web3py应该是python上跟智能合约交互最好用的包了,首先我们安装一下。 如果你是mac系统,直接使用:`pip install web3` 进行安装。 如果你是windows系统,则需要先装一下c++环境。 下载 vs_buildtools: https://visualstudio.microsoft.com/zh-hant/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16 之后如图安装下面勾选的包,一定要装全,已包含和可选两部分你都要装...
Quarter I 2022
原文作者:Ansem(推特@blknoiz06) 原文链接: https://blknoiz06.substack.com/p/quarter-i-2022?token=eyJ1c2VyX2lkIjoxNTEzODUxLCJwb3N0X2lkIjo0NDk3NTUwMywiXyI6Impza3RSIiwiaWF0IjoxNjQxMDAyOTU4LCJleHAiOjE2NDEwMDY1NTgsImlzcyI6InB1Yi0zNDg4NDgiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.Cqy5UR9NIQI5frgMTGectMzDdH_0CF2RZHRcrmNejs4 译者:Evelyn、AluAyi、Henson、Rex|W3.Hitchhiker2022市场整体展望你好!对于我的堕落同胞(fellow degenerates)和其他不知何故闯入这个页面的读者们,我将尝试在这里梳理今年一季度的一些想法。这是我第二次写这样的长篇大论,所以请忍耐一下(哈哈),希望它比从我推特发出来的数百条零零散散的推文更有条理。 2021年对于加密资产来说很显然是突破性的一年,从...
zecrey测试网测试交互教程 — Mirror
介绍Zecrey是L2 基于zk-rollup的协议,它可以带来交链隐私到多链生态,以减轻隐私保护和生态隔离的困境中加密的世界。Zecrey 的使命是为数字资产带来跨链隐私。 1月1日官方新鲜出炉的测试公告:官推: https://twitter.com/zecreyprotocol交互吧勇士1、安装Zecrey Chrome扩展钱包 https://chrome.google.com/webstore/detail/zecrey/ojbpcbinjmochkhelkflddfnmcceomdi 安装,创建钱包,保存好助记词~~2、领水 先打开网站领水~~(下面有惊吓) https://faucet.zecrey.com/点击Connect Wallet,链接钱包 这里提供了Rinkeby、Polygon、Aurora、Avax、Bsc的测试水龙头,都给他领了~~~ 尴尬的是你没钱来领这个水,所以先去解决水龙头问题: 方法如下: 1>获得zecrey的Private Key(Account Details ->Export Private Key),然后在小狐狸中Import A...
Subscribe to ourens.eth
Subscribe to ourens.eth
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
终于到了大家心心念念的游戏脚本编写的教程了,今天我会以前段时间比较火的游戏“掰手腕”为例子,来教大家如何写一个游戏脚本。
无论哪个游戏,我们要写脚本,都是要先进行一下交互,看自己的交互记录来写脚本。
这里我展示一下我的一次fight记录:

从这个记录中,我们可以得到很多信息。比如游戏的合约地址、方法名、参数名、参数值。
其实知道这些就可以写脚本了,但是我们还需要ABI才可以进行调用,如果我们打开合约的源代码看到的这是这样:

这说明该合约没有开源,所以无法看到合约的源代码,这时候我们要怎么寻找ABI呢?

如果你学习过智能合约的一些知识,可能会发现,网站(DAPP)也是通过ABI+web3.js跟智能合约做交互,我们web3py也是一样的道理。所以这些游戏网站都会有ABI来让你调用,也就是说我们去扒一扒网站的源代码即可!

通过搜索,在网站的源代码中很容易可以找到。如果JS比较多,需要一个一个看。如果你用safari浏览器可以全局搜索,Chrome好像要一个一个的去找一下。
然后ABI一般都非常长,我们如果只用一个fight方法,完全可以只取这一段:
[{"inputs":[{"internalType":"uint256","name":"armzId","type":"uint256"},{"internalType":"uint256","name":"boss","type":"uint256"}],"name":"fight","outputs":[],"stateMutability":"nonpayable","type":"function"}]
这一段ABI就只包含了fight一个方法,你在寻找ABI的时候注意核对一下inputs参数是否对应你之前的交互记录里面的参数,一定做到完全匹配再用。
完整的交互fight方法如下:
from web3 import Web3, HTTPProvider
contract_address = '' # 智能合约地址
contract_abi = '' # ABI
private_key = ''
address = ''
token_id = 112233
rpc = 'https://bsc-dataseed1.binance.org:443'
web3 = Web3(HTTPProvider(rpc))
arms_contract = web3.eth.contract(address=contract_address, abi=contract_abi)
func = arms_contract.functions.fight(token_id, 0)
nonce = web3.eth.getTransactionCount(address)
params = {
"from": 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'战斗失败', e)
然后我们聊一下两个参数,第一个参数就是你参与战斗的NFT的TokenID,这个你在区块链浏览器就可以看到。另一个参数就是你选择的Boss编号,从0到2,对应页面的这三个BOSS:

再来说说如何用代码去寻找你的TokenID,你可能有上百个NFT,如果没有存储的习惯,是很难去寻找所有Token的编号。这里我给大家推荐一个接口。
这里还是用BSC举例,其他的evm公链都有类似接口。
https://docs.bscscan.com/api-endpoints/tokens#get-address-bep721-token-inventory-by-contract-address
这个接口中只需要修改address为你的地址,contractaddress改成合约地址,就可以拿到所有的tokenID,但是可能会出现重复。
如果你mint了一个NFT,并把这个NFT交易出去了,会有两条记录,但是你现在是没有持有这个NFT的。所以需要进行一个过滤,过滤偶数的记录,留下单数的即可。
好了,到这里基本就把掰手腕的战斗交互讲完了。剩下的mint和领取币,大家可以照猫画虎的去完成,如果有遇到任何问题欢迎在discord中提问!
我发现其实如果你自己真的打算玩这个游戏,要投入资金去搞是值得写一写脚本。像我只为了写个教程的就算了,因为你要付出不少的成本去测试…
我终于发现众筹的钱是做什么的了,是给我报销gas和游戏的费用 T T
如果对智能合约开发感兴趣,可以看看B站的这套视频:
https://space.bilibili.com/2043099931/video
这套视频我看完了,很不错,就是前半段声音可能有点小,后面就好很多。
终于到了大家心心念念的游戏脚本编写的教程了,今天我会以前段时间比较火的游戏“掰手腕”为例子,来教大家如何写一个游戏脚本。
无论哪个游戏,我们要写脚本,都是要先进行一下交互,看自己的交互记录来写脚本。
这里我展示一下我的一次fight记录:

从这个记录中,我们可以得到很多信息。比如游戏的合约地址、方法名、参数名、参数值。
其实知道这些就可以写脚本了,但是我们还需要ABI才可以进行调用,如果我们打开合约的源代码看到的这是这样:

这说明该合约没有开源,所以无法看到合约的源代码,这时候我们要怎么寻找ABI呢?

如果你学习过智能合约的一些知识,可能会发现,网站(DAPP)也是通过ABI+web3.js跟智能合约做交互,我们web3py也是一样的道理。所以这些游戏网站都会有ABI来让你调用,也就是说我们去扒一扒网站的源代码即可!

通过搜索,在网站的源代码中很容易可以找到。如果JS比较多,需要一个一个看。如果你用safari浏览器可以全局搜索,Chrome好像要一个一个的去找一下。
然后ABI一般都非常长,我们如果只用一个fight方法,完全可以只取这一段:
[{"inputs":[{"internalType":"uint256","name":"armzId","type":"uint256"},{"internalType":"uint256","name":"boss","type":"uint256"}],"name":"fight","outputs":[],"stateMutability":"nonpayable","type":"function"}]
这一段ABI就只包含了fight一个方法,你在寻找ABI的时候注意核对一下inputs参数是否对应你之前的交互记录里面的参数,一定做到完全匹配再用。
完整的交互fight方法如下:
from web3 import Web3, HTTPProvider
contract_address = '' # 智能合约地址
contract_abi = '' # ABI
private_key = ''
address = ''
token_id = 112233
rpc = 'https://bsc-dataseed1.binance.org:443'
web3 = Web3(HTTPProvider(rpc))
arms_contract = web3.eth.contract(address=contract_address, abi=contract_abi)
func = arms_contract.functions.fight(token_id, 0)
nonce = web3.eth.getTransactionCount(address)
params = {
"from": 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'战斗失败', e)
然后我们聊一下两个参数,第一个参数就是你参与战斗的NFT的TokenID,这个你在区块链浏览器就可以看到。另一个参数就是你选择的Boss编号,从0到2,对应页面的这三个BOSS:

再来说说如何用代码去寻找你的TokenID,你可能有上百个NFT,如果没有存储的习惯,是很难去寻找所有Token的编号。这里我给大家推荐一个接口。
这里还是用BSC举例,其他的evm公链都有类似接口。
https://docs.bscscan.com/api-endpoints/tokens#get-address-bep721-token-inventory-by-contract-address
这个接口中只需要修改address为你的地址,contractaddress改成合约地址,就可以拿到所有的tokenID,但是可能会出现重复。
如果你mint了一个NFT,并把这个NFT交易出去了,会有两条记录,但是你现在是没有持有这个NFT的。所以需要进行一个过滤,过滤偶数的记录,留下单数的即可。
好了,到这里基本就把掰手腕的战斗交互讲完了。剩下的mint和领取币,大家可以照猫画虎的去完成,如果有遇到任何问题欢迎在discord中提问!
我发现其实如果你自己真的打算玩这个游戏,要投入资金去搞是值得写一写脚本。像我只为了写个教程的就算了,因为你要付出不少的成本去测试…
我终于发现众筹的钱是做什么的了,是给我报销gas和游戏的费用 T T
如果对智能合约开发感兴趣,可以看看B站的这套视频:
https://space.bilibili.com/2043099931/video
这套视频我看完了,很不错,就是前半段声音可能有点小,后面就好很多。
No activity yet