python-3.x - 如何使用 Web3 访问受访问权限保护的智能合约功能?
问题描述
我有一个安全令牌的智能合约地址,它的某些功能受访问权限的保护,我有一个访问这些功能的地址,但是我不知道如何通过指定权限来调用该功能.
from web3 import HTTPProvider, Web3, exceptions
w3 = Web3(HTTPProvider('https://ropsten.infura.io/RPw9nHRS7Ue47RaKVvHM'))
contract_address = '0x635209612bf0e830ac348ef30357ee4f0e5bf560'
provider_abi = [{"anonymous":False,"inputs":[{"indexed":False,"name":"addr","type":"address"},{"indexed":False,"name":"propertyKey","type":"bytes32"},{"indexed":False,"name":"propertyValue","type":"bytes32"}],"name":"PropertySet","type":"event"},{"constant":False,"inputs":[{"name":"_addr","type":"address"},{"name":"_propertyKey","type":"bytes32"},{"name":"_propertyValue","type":"bytes32"}],"name":"setProperty","outputs":[{"name":"","type":"bool"}],"payable":False,"stateMutability":"nonpayable","type":"function"},{"constant":True,"inputs":[{"name":"_addr","type":"address"},{"name":"_propertyKey","type":"bytes32"}],"name":"getProperty","outputs":[{"name":"","type":"bytes32"}],"payable":False,"stateMutability":"view","type":"function"}]
instance = w3.eth.contract(
address=Web3.toChecksumAddress(contract_address),
abi = provider_abi
)
user_address = "0x25BEADE120E501D7b984498D196eFe4AbE6a11F6"
country_key = "country"
country_byte_32 = Web3.toHex(Web3.toBytes(text=country_key))
print(country_byte_32) # Prints 0x636f756e747279
country_val = "IN"
country_val_byte_32 = Web3.toHex(Web3.toBytes(text=country_val))
print(country_val_byte_32) # Prints 0x494e
try:
result = instance.call().setProperty(user_address,country_byte_32,country_val_byte_32)
print(result) # Prints False
except exceptions.MismatchedABI as ve :
print(ve)
import traceback
print(traceback.format_exc())
谁能告诉我,我如何提供访问权限地址?
解决方案
要将值放入表单字段中,您可以这样做
result = instance.call({"from": user_address }).setProperty(user_address,country_byte_32,country_val_byte_32)
推荐阅读
- oracle - 如何使用 sysdba 连接到本地 oracle 数据库 19c
- html - 单击另一个按钮时如何关闭 HTML 中的按钮,以便折叠的文本不会重叠/按钮的数据
- c++ - “collect2.exe:错误:ld 返回 1 退出状态”是我在尝试使用 c lang 时得到的
- httpclient - 带有 Angular 元素的 SPFx Webpart 在 SharePoint 页面中不起作用
- java - 使用 Firestore 数据库检索和存储用户日期的 Java 算法
- python - 用于验证特殊字符和小写字母的 if 语句
- java - 无法解析 Android 应用程序模块的 Gradle 配置。解决 Gradle 构建问题/重新同步
- c++ - 如何将简单的字符串 cpp 变量转换为 MIPS 代码
- java - 为什么在这个java程序中使用z?
- flutter - 用于链接的 Flutter markdown 自定义 BlockSyntax