web3py第三课:游戏脚本编写 & 不开源合约调用
终于到了大家心心念念的游戏脚本编写的教程了,今天我会以前段时间比较火的游戏“掰手腕”为例子,来教大家如何写一个游戏脚本。教程无论哪个游戏,我们要写脚本,都是要先进行一下交互,看自己的交互记录来写脚本。 这里我展示一下我的一次fight记录:从这个记录中,我们可以得到很多信息。比如游戏的合约地址、方法名、参数名、参数值。 其实知道这些就可以写脚本了,但是我们还需要ABI才可以进行调用,如果我们打开合约的源代码看到的这是这样:这说明该合约没有开源,所以无法看到合约的源代码,这时候我们要怎么寻找ABI呢?如果你学习过智能合约的一些知识,可能会发现,网站(DAPP)也是通过ABI+web3.js跟智能合约做交互,我们web3py也是一样的道理。所以这些游戏网站都会有ABI来让你调用,也就是说我们去扒一扒网站的源代码即可!通过搜索,在网站的源代码中很容易可以找到。如果JS比较多,需要一个一个看。如果你用safari浏览器可以全局搜索,Chrome好像要一个一个的去找一下。 然后ABI一般都非常长,我们如果只用一个fight方法,完全可以只取这一段:[{"inputs":[{"interna...
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第三课:游戏脚本编写 & 不开源合约调用
终于到了大家心心念念的游戏脚本编写的教程了,今天我会以前段时间比较火的游戏“掰手腕”为例子,来教大家如何写一个游戏脚本。教程无论哪个游戏,我们要写脚本,都是要先进行一下交互,看自己的交互记录来写脚本。 这里我展示一下我的一次fight记录:从这个记录中,我们可以得到很多信息。比如游戏的合约地址、方法名、参数名、参数值。 其实知道这些就可以写脚本了,但是我们还需要ABI才可以进行调用,如果我们打开合约的源代码看到的这是这样:这说明该合约没有开源,所以无法看到合约的源代码,这时候我们要怎么寻找ABI呢?如果你学习过智能合约的一些知识,可能会发现,网站(DAPP)也是通过ABI+web3.js跟智能合约做交互,我们web3py也是一样的道理。所以这些游戏网站都会有ABI来让你调用,也就是说我们去扒一扒网站的源代码即可!通过搜索,在网站的源代码中很容易可以找到。如果JS比较多,需要一个一个看。如果你用safari浏览器可以全局搜索,Chrome好像要一个一个的去找一下。 然后ABI一般都非常长,我们如果只用一个fight方法,完全可以只取这一段:[{"inputs":[{"interna...
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
这一篇是正式建立DFarm DAO以来的第一篇文章了,本来这周不准备分享。但是感觉基础的一些知识可以先讲,大家先熟悉一下,所以今天就分享一下web3py跟智能合约交互的一些基础知识。
这部分都是非常简单的代码,希望大家尝试一下。
python、pycharm这些环境和开发工具大家自行安装即可,网上一搜都是教程,比我写的好很多,这部分内容不再赘述。
web3py文档:
https://web3py.readthedocs.io/en/stable/index.html
web3py应该是python上跟智能合约交互最好用的包了,首先我们安装一下。
如果你是mac系统,直接使用:`pip install web3` 进行安装。
如果你是windows系统,则需要先装一下c++环境。
下载 vs_buildtools:
之后如图安装下面勾选的包,一定要装全,已包含和可选两部分你都要装!

安装好之后,重启电脑,再进行 `pip install web3` 即可。
我们新建一个py文件,开始编码吧~
from web3 import Web3, HTTPProvider
address = '0xxx'
rpc = 'https://bsc-dataseed1.binance.org:443'
web3 = Web3(HTTPProvider(rpc))
balance = web3.fromWei(web3.eth.getBalance(address), "ether")
print(balance)
这部分代码就是展示一个地址的ETH余额的代码。
开头一定要引用web的包。
address就是你的地址,这里填上即可。
rpc这个参数大家应该比较熟悉了,每个类evm的公链都有很多rpc,这里罗列一些,如果没有你需要的rpc,去谷歌搜索即可。
Ethereum | https://cloudflare-eth.com
BSC | https://bsc-dataseed1.binance.org:443
Ploygon | https://rpc-mainnet.matic.network
Fantom | https://rpcapi.fantom.network
当你不知道某公链的RPC,可以去chainlist搜索,链接小狐狸钱包即可很快速的添加你想要的公链RPC。
好了,我们继续说代码。后面就是实例化了web3。
调用了getBalance这方法去获取余额,这里只需要传入地址即可获取改地址的ETH余额。如果RPC是BSC的则是BNB余额。切换公链只需要修改RPC,其他都是一样的代码。
fromWei这个方法是进行了一下单位换算,ETH的最小单位为wei,1个ETH相当于10的8次方wei。通常,大家也使用Gwei作为展示单位。比较常用的就是eth,Gwei和wei。

最后我们打印出来balance,就可以看到我们的余额了。你可以找一个你的钱包去试试这段代码!
显示ETH余额完毕,下面来看看如何显示你的ERC-20 Token余额。
from web3 import Web3, HTTPProvider
import json
address = '0xxxx'
rpc = 'https://bsc-dataseed1.binance.org:443'
CAKE_BSC_ADDRESS = Web3.toChecksumAddress('合约地址')
CAKE_BSC_ABI = json.loads('这里需要粘贴一大段ABI')
web3 = Web3(HTTPProvider(rpc))
token_contract = web3.eth.contract(address=CAKE_BSC_ADDRESS, abi=CAKE_BSC_ABI)
balance = web3.fromWei(token_contract.functions.balanceOf(address).call(), "ether")
print(balance)
这段代码就是查询了一下钱包中的CAKE代币余额。
因为市面上的ERC20代币非常多,所以如果要查询代币余额,首先要有该代币的合约地址,代币合约地址我相信大部分人都会查询,可以查询自己的钱包记录,也可以去cmc等网站查询代币合约地址。
然后我们还需要一些代币的ABI,这个ABI如何找呢,我们可以通过代币地址的合约代码去查看。
以CAKE举例,我们打开智能合约地址:
https://bscscan.com/address/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82#code

可以下面找到合约的ABI,点击复制按钮即可复制,粘贴到我们的代码中即可。其实也有获取ABI的接口,这里就不讲了。
有了合约地址和ABI就可以实例化这个合约了,这就是参数token_contract。
token_contract.functions.balanceOf 这句话的意思就是调用了CAKE合约的balanceOf 方法,这个方法是CAKE的智能合约提供的,我们在区块链浏览器上也可以看到该方法。

看到这里你可能明白ABI的意义了,就是告诉你这个合约调用的方法和参数。
我们最后打印balance,即可看到自己CAKE的余额了。赶紧换成别的合约地址来试试吧~
转账这部分也分为两块,ETH转账和ERC20的Token转账。
def transfer_eth(target_address, amount, gas_price=5, gas_limit=21000):
nonce = web3.eth.getTransactionCount(address)
params = {
'nonce': nonce,
'to': target_address,
'value': web3.toWei(amount, 'ether'),
'gas': gas_limit,
'gasPrice': web3.toWei(gas_price, 'gwei'),
'from': address,
}
signed_tx = web3.eth.account.signTransaction(params, private_key=private_key)
tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
return tx_hash
这里我封装了一个transfer_eth方法,方便以后复用。
target_address就是转账目标的地址也就是收款方,amount就是转账数量,gas_price和
gas_limit是用来计算gas使用,BSC网络一般gas_price是5即可。其他网络gas费用浮动较大,需要查看当时的gas来填写。
首先我们获取nonce,nonce你可以理解为是你的钱包的一个顺序,我们可以按一定的顺序发送交易,也可以覆盖交易。
private_key参数就是你的钱包私钥。私钥可以通过imToken等钱包导出使用。一定要找一个不常用的钱包哦,因为复制私钥十分危险,一定要安全第一。
最后我们会获得一个tx_hash,这个就是区块链记录的哈希值了。我们可以等待交易成功后,查看该tx的记录。
def transfer_token(token_contract, target_address, amount, gas_price=5, gas_limit=500000):
params = {
"from": address,
"value": 0,
'gasPrice': web3.toWei(gas_price, 'gwei'),
"gas": gas_limit,
"nonce": web3.eth.getTransactionCount(address),
}
func = token_contract.functions.transfer(target_address, web3.toWei(amount, "ether"))
tx = func.buildTransaction(params)
signed_tx = web3.eth.account.sign_transaction(tx, private_key=private_key)
tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
return tx_hash
transfer_token这部分代码就是转账ERC20代币,看上去跟转ETH大同小异,只不过这里调用了代币合约的transfer方法。
以上转账的方法,我建议大家也跑一下。可以在以太坊的测试网络,测试网络领水之后就可以免费测试自己的代码。
这里推荐kovan测试网。
RPC:
https://kovan.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161
领水地址:
https://faucets.chain.link/kovan
可以领取0.1ETH和10LINK进行查询余额、转账的测试。
本系列教程刚刚开始编写,还有很多不足,希望大家多多包涵。
如有问题可以在discord内交流。
本篇文章大概在半个月后会免费公开到网络上。
这一篇是正式建立DFarm DAO以来的第一篇文章了,本来这周不准备分享。但是感觉基础的一些知识可以先讲,大家先熟悉一下,所以今天就分享一下web3py跟智能合约交互的一些基础知识。
这部分都是非常简单的代码,希望大家尝试一下。
python、pycharm这些环境和开发工具大家自行安装即可,网上一搜都是教程,比我写的好很多,这部分内容不再赘述。
web3py文档:
https://web3py.readthedocs.io/en/stable/index.html
web3py应该是python上跟智能合约交互最好用的包了,首先我们安装一下。
如果你是mac系统,直接使用:`pip install web3` 进行安装。
如果你是windows系统,则需要先装一下c++环境。
下载 vs_buildtools:
之后如图安装下面勾选的包,一定要装全,已包含和可选两部分你都要装!

安装好之后,重启电脑,再进行 `pip install web3` 即可。
我们新建一个py文件,开始编码吧~
from web3 import Web3, HTTPProvider
address = '0xxx'
rpc = 'https://bsc-dataseed1.binance.org:443'
web3 = Web3(HTTPProvider(rpc))
balance = web3.fromWei(web3.eth.getBalance(address), "ether")
print(balance)
这部分代码就是展示一个地址的ETH余额的代码。
开头一定要引用web的包。
address就是你的地址,这里填上即可。
rpc这个参数大家应该比较熟悉了,每个类evm的公链都有很多rpc,这里罗列一些,如果没有你需要的rpc,去谷歌搜索即可。
Ethereum | https://cloudflare-eth.com
BSC | https://bsc-dataseed1.binance.org:443
Ploygon | https://rpc-mainnet.matic.network
Fantom | https://rpcapi.fantom.network
当你不知道某公链的RPC,可以去chainlist搜索,链接小狐狸钱包即可很快速的添加你想要的公链RPC。
好了,我们继续说代码。后面就是实例化了web3。
调用了getBalance这方法去获取余额,这里只需要传入地址即可获取改地址的ETH余额。如果RPC是BSC的则是BNB余额。切换公链只需要修改RPC,其他都是一样的代码。
fromWei这个方法是进行了一下单位换算,ETH的最小单位为wei,1个ETH相当于10的8次方wei。通常,大家也使用Gwei作为展示单位。比较常用的就是eth,Gwei和wei。

最后我们打印出来balance,就可以看到我们的余额了。你可以找一个你的钱包去试试这段代码!
显示ETH余额完毕,下面来看看如何显示你的ERC-20 Token余额。
from web3 import Web3, HTTPProvider
import json
address = '0xxxx'
rpc = 'https://bsc-dataseed1.binance.org:443'
CAKE_BSC_ADDRESS = Web3.toChecksumAddress('合约地址')
CAKE_BSC_ABI = json.loads('这里需要粘贴一大段ABI')
web3 = Web3(HTTPProvider(rpc))
token_contract = web3.eth.contract(address=CAKE_BSC_ADDRESS, abi=CAKE_BSC_ABI)
balance = web3.fromWei(token_contract.functions.balanceOf(address).call(), "ether")
print(balance)
这段代码就是查询了一下钱包中的CAKE代币余额。
因为市面上的ERC20代币非常多,所以如果要查询代币余额,首先要有该代币的合约地址,代币合约地址我相信大部分人都会查询,可以查询自己的钱包记录,也可以去cmc等网站查询代币合约地址。
然后我们还需要一些代币的ABI,这个ABI如何找呢,我们可以通过代币地址的合约代码去查看。
以CAKE举例,我们打开智能合约地址:
https://bscscan.com/address/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82#code

可以下面找到合约的ABI,点击复制按钮即可复制,粘贴到我们的代码中即可。其实也有获取ABI的接口,这里就不讲了。
有了合约地址和ABI就可以实例化这个合约了,这就是参数token_contract。
token_contract.functions.balanceOf 这句话的意思就是调用了CAKE合约的balanceOf 方法,这个方法是CAKE的智能合约提供的,我们在区块链浏览器上也可以看到该方法。

看到这里你可能明白ABI的意义了,就是告诉你这个合约调用的方法和参数。
我们最后打印balance,即可看到自己CAKE的余额了。赶紧换成别的合约地址来试试吧~
转账这部分也分为两块,ETH转账和ERC20的Token转账。
def transfer_eth(target_address, amount, gas_price=5, gas_limit=21000):
nonce = web3.eth.getTransactionCount(address)
params = {
'nonce': nonce,
'to': target_address,
'value': web3.toWei(amount, 'ether'),
'gas': gas_limit,
'gasPrice': web3.toWei(gas_price, 'gwei'),
'from': address,
}
signed_tx = web3.eth.account.signTransaction(params, private_key=private_key)
tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
return tx_hash
这里我封装了一个transfer_eth方法,方便以后复用。
target_address就是转账目标的地址也就是收款方,amount就是转账数量,gas_price和
gas_limit是用来计算gas使用,BSC网络一般gas_price是5即可。其他网络gas费用浮动较大,需要查看当时的gas来填写。
首先我们获取nonce,nonce你可以理解为是你的钱包的一个顺序,我们可以按一定的顺序发送交易,也可以覆盖交易。
private_key参数就是你的钱包私钥。私钥可以通过imToken等钱包导出使用。一定要找一个不常用的钱包哦,因为复制私钥十分危险,一定要安全第一。
最后我们会获得一个tx_hash,这个就是区块链记录的哈希值了。我们可以等待交易成功后,查看该tx的记录。
def transfer_token(token_contract, target_address, amount, gas_price=5, gas_limit=500000):
params = {
"from": address,
"value": 0,
'gasPrice': web3.toWei(gas_price, 'gwei'),
"gas": gas_limit,
"nonce": web3.eth.getTransactionCount(address),
}
func = token_contract.functions.transfer(target_address, web3.toWei(amount, "ether"))
tx = func.buildTransaction(params)
signed_tx = web3.eth.account.sign_transaction(tx, private_key=private_key)
tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
return tx_hash
transfer_token这部分代码就是转账ERC20代币,看上去跟转ETH大同小异,只不过这里调用了代币合约的transfer方法。
以上转账的方法,我建议大家也跑一下。可以在以太坊的测试网络,测试网络领水之后就可以免费测试自己的代码。
这里推荐kovan测试网。
RPC:
https://kovan.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161
领水地址:
https://faucets.chain.link/kovan
可以领取0.1ETH和10LINK进行查询余额、转账的测试。
本系列教程刚刚开始编写,还有很多不足,希望大家多多包涵。
如有问题可以在discord内交流。
本篇文章大概在半个月后会免费公开到网络上。
No activity yet