[英]How to get smart contract call address from contract address and abi
如何在不使用输入 arguments 生成调用数据的情况下获取智能合约 function 的地址。
我有合约地址和 abi,我想列出所有 function 地址而不看 arguments 函数需要什么。
合约: https://bscscan.com/token/0x820B0E1B80D94396cAf58a868CD691bA5B1a644f#readContract
from web3 import Web3
from json import loads
rpc_url = "https://bsc-dataseed.binance.org"
web3 = Web3(Web3.HTTPProvider(rpc_url))
_addr = "0x820B0E1B80D94396cAf58a868CD691bA5B1a644f"
_abi = loads('[{"inputs":[{"internalType":"address","name":"_presaleGenerator","type":"address"},{"internalType":"contract IPresaleSettings","name":"_presaleSettings","type":"address"},{"internalType":"address","name":"_tokenVesting","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"BUYERS","outputs":[{"internalType":"uint256","name":"baseDeposited","type":"uint256"},{"internalType":"uint256","name":"tokensOwed","type":"uint256"},{"internalType":"uint256","name":"unclOwed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_VERSION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_FEE_INFO","outputs":[{"internalType":"uint256","name":"UNICRYPT_BASE_FEE","type":"uint256"},{"internalType":"uint256","name":"UNICRYPT_TOKEN_FEE","type":"uint256"},{"internalType":"uint256","name":"REFERRAL_FEE","type":"uint256"},{"internalType":"address payable","name":"REFERRAL_1","type":"address"},{"internalType":"address payable","name":"REFERRAL_2","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_GENERATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_INFO","outputs":[{"internalType":"contract IERC20","name":"S_TOKEN","type":"address"},{"internalType":"contract IERC20","name":"B_TOKEN","type":"address"},{"internalType":"uint256","name":"TOKEN_PRICE","type":"uint256"},{"internalType":"uint256","name":"MAX_SPEND_PER_BUYER","type":"uint256"},{"internalType":"uint256","name":"AMOUNT","type":"uint256"},{"internalType":"uint256","name":"HARDCAP","type":"uint256"},{"internalType":"uint256","name":"SOFTCAP","type":"uint256"},{"internalType":"uint256","name":"LIQUIDITY_PERCENT","type":"uint256"},{"internalType":"uint256","name":"LISTING_RATE","type":"uint256"},{"internalType":"uint256","name":"START_BLOCK","type":"uint256"},{"internalType":"uint256","name":"END_BLOCK","type":"uint256"},{"internalType":"uint256","name":"LOCK_PERIOD","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_INFO_2","outputs":[{"internalType":"address payable","name":"PRESALE_OWNER","type":"address"},{"internalType":"bool","name":"PRESALE_IN_ETH","type":"bool"},{"internalType":"uint16","name":"COUNTRY_CODE","type":"uint16"},{"internalType":"uint128","name":"UNCL_MAX_PARTICIPANTS","type":"uint128"},{"internalType":"uint128","name":"UNCL_PARTICIPANTS","type":"uint128"},{"internalType":"uint128","name":"WHITELIST_MAX_PARTICIPANTS","type":"uint128"},{"internalType":"uint128","name":"WHITELIST_ASSIGNED","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_LOCK_FORWARDER","outputs":[{"internalType":"contract IPresaleLockForwarder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_SETTINGS","outputs":[{"internalType":"contract IPresaleSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_VESTING","outputs":[{"internalType":"bool","name":"REQUEST_VESTING","type":"bool"},{"internalType":"bool","name":"IMPLEMENT_VESTING","type":"bool"},{"internalType":"bool","name":"LINEAR_LOCK","type":"bool"},{"internalType":"uint256","name":"VESTING_START_EMISSION","type":"uint256"},{"internalType":"uint256","name":"VESTING_END_EMISSION","type":"uint256"},{"internalType":"uint256","name":"VESTING_PERCENTAGE","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATUS","outputs":[{"internalType":"bool","name":"LP_GENERATION_COMPLETE","type":"bool"},{"internalType":"bool","name":"FORCE_FAILED","type":"bool"},{"internalType":"uint256","name":"TOTAL_BASE_COLLECTED","type":"uint256"},{"internalType":"uint256","name":"TOTAL_TOKENS_SOLD","type":"uint256"},{"internalType":"uint256","name":"TOTAL_TOKENS_WITHDRAWN","type":"uint256"},{"internalType":"uint256","name":"TOTAL_BASE_WITHDRAWN","type":"uint256"},{"internalType":"uint256","name":"ROUND1_LENGTH","type":"uint256"},{"internalType":"uint256","name":"ROUND_0_START","type":"uint256"},{"internalType":"uint256","name":"NUM_BUYERS","type":"uint256"},{"internalType":"uint256","name":"PRESALE_END_DATE","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_VESTING","outputs":[{"internalType":"contract ITokenVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNCL_AMOUNT_OVERRIDE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNCL_BURN_ON_FAIL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNI_FACTORY","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"editWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceFailByPresaleOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceFailByUnicrypt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getElapsedSinceRound0","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getElapsedSinceRound1","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInfo","outputs":[{"internalType":"uint16","name":"","type":"uint16"},{"components":[{"internalType":"contract IERC20","name":"S_TOKEN","type":"address"},{"internalType":"contract IERC20","name":"B_TOKEN","type":"address"},{"internalType":"uint256","name":"TOKEN_PRICE","type":"uint256"},{"internalType":"uint256","name":"MAX_SPEND_PER_BUYER","type":"uint256"},{"internalType":"uint256","name":"AMOUNT","type":"uint256"},{"internalType":"uint256","name":"HARDCAP","type":"uint256"},{"internalType":"uint256","name":"SOFTCAP","type":"uint256"},{"internalType":"uint256","name":"LIQUIDITY_PERCENT","type":"uint256"},{"internalType":"uint256","name":"LISTING_RATE","type":"uint256"},{"internalType":"uint256","name":"START_BLOCK","type":"uint256"},{"internalType":"uint256","name":"END_BLOCK","type":"uint256"},{"internalType":"uint256","name":"LOCK_PERIOD","type":"uint256"}],"internalType":"struct Presale01.PresaleInfo","name":"","type":"tuple"},{"components":[{"internalType":"address payable","name":"PRESALE_OWNER","type":"address"},{"internalType":"bool","name":"PRESALE_IN_ETH","type":"bool"},{"internalType":"uint16","name":"COUNTRY_CODE","type":"uint16"},{"internalType":"uint128","name":"UNCL_MAX_PARTICIPANTS","type":"uint128"},{"internalType":"uint128","name":"UNCL_PARTICIPANTS","type":"uint128"},{"internalType":"uint128","name":"WHITELIST_MAX_PARTICIPANTS","type":"uint128"},{"internalType":"uint128","name":"WHITELIST_ASSIGNED","type":"uint128"}],"internalType":"struct Presale01.PresaleInfo2","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"UNICRYPT_BASE_FEE","type":"uint256"},{"internalType":"uint256","name":"UNICRYPT_TOKEN_FEE","type":"uint256"},{"internalType":"uint256","name":"REFERRAL_FEE","type":"uint256"},{"internalType":"address payable","name":"REFERRAL_1","type":"address"},{"internalType":"address payable","name":"REFERRAL_2","type":"address"}],"internalType":"struct Presale01.PresaleFeeInfo","name":"","type":"tuple"},{"components":[{"internalType":"bool","name":"LP_GENERATION_COMPLETE","type":"bool"},{"internalType":"bool","name":"FORCE_FAILED","type":"bool"},{"internalType":"uint256","name":"TOTAL_BASE_COLLECTED","type":"uint256"},{"internalType":"uint256","name":"TOTAL_TOKENS_SOLD","type":"uint256"},{"internalType":"uint256","name":"TOTAL_TOKENS_WITHDRAWN","type":"uint256"},{"internalType":"uint256","name":"TOTAL_BASE_WITHDRAWN","type":"uint256"},{"internalType":"uint256","name":"ROUND1_LENGTH","type":"uint256"},{"internalType":"uint256","name":"ROUND_0_START","type":"uint256"},{"internalType":"uint256","name":"NUM_BUYERS","type":"uint256"},{"internalType":"uint256","name":"PRESALE_END_DATE","type":"uint256"}],"internalType":"struct Presale01.PresaleStatus","name":"","type":"tuple"},{"components":[{"internalType":"bool","name":"REQUEST_VESTING","type":"bool"},{"internalType":"bool","name":"IMPLEMENT_VESTING","type":"bool"},{"internalType":"bool","name":"LINEAR_LOCK","type":"bool"},{"internalType":"uint256","name":"VESTING_START_EMISSION","type":"uint256"},{"internalType":"uint256","name":"VESTING_END_EMISSION","type":"uint256"},{"internalType":"uint256","name":"VESTING_PERCENTAGE","type":"uint256"}],"internalType":"struct Presale01.PresaleVesting","name":"","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"getPagedWhitelist","outputs":[{"components":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"baseDeposited","type":"uint256"}],"internalType":"struct Presale01.WhitelistPager[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUNCLOverride","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserWhitelistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getWhitelistedUserAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistedUsersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_countryCode","type":"uint16"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_tokenPrice","type":"uint256"},{"internalType":"uint256","name":"_maxEthPerBuyer","type":"uint256"},{"internalType":"uint256","name":"_hardcap","type":"uint256"},{"internalType":"uint256","name":"_softcap","type":"uint256"},{"internalType":"uint256","name":"_liquidityPercent","type":"uint256"},{"internalType":"uint256","name":"_listingRate","type":"uint256"},{"internalType":"uint256","name":"_roundZeroStart","type":"uint256"},{"internalType":"uint256","name":"_startblock","type":"uint256"},{"internalType":"uint256","name":"_endblock","type":"uint256"},{"internalType":"uint256","name":"_lockPeriod","type":"uint256"}],"name":"init1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_presaleOwner","type":"address"},{"internalType":"contract IERC20","name":"_baseToken","type":"address"},{"internalType":"contract IERC20","name":"_presaleToken","type":"address"},{"internalType":"uint256","name":"_unicryptBaseFee","type":"uint256"},{"internalType":"uint256","name":"_unicryptTokenFee","type":"uint256"},{"internalType":"uint256","name":"_referralFee","type":"uint256"},{"internalType":"address payable","name":"_referral_1","type":"address"},{"internalType":"address payable","name":"_referral_2","type":"address"},{"internalType":"bool","name":"_requestVesting","type":"bool"}],"name":"init2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerWithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveAllocationWithUNCL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_referrer","type":"address"}],"name":"setReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_implementVesting","type":"bool"},{"internalType":"bool","name":"_linearLock","type":"bool"},{"internalType":"uint256","name":"_startIncrement","type":"uint256"},{"internalType":"uint256","name":"_endIncrement","type":"uint256"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setTokenVestingParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setUNCLAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"updateBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"userDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"userWithdrawBaseTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userWithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]')
cont = web3.eth.contract(address=_addr, abi=_abi)
.all_functions()
print(cont.all_functions())
[
<Function BUYERS(address)>,
<Function CONTRACT_VERSION()>,
<Function PRESALE_FEE_INFO()>,
<Function PRESALE_GENERATOR()>,
<Function PRESALE_INFO()>,
<Function PRESALE_INFO_2()>,
<Function PRESALE_LOCK_FORWARDER()>,
<Function PRESALE_SETTINGS()>,
<Function PRESALE_VESTING()>,
<Function STATUS()>,
<Function TOKEN_VESTING()>,
<Function UNCL_AMOUNT_OVERRIDE()>,
<Function UNCL_BURN_ON_FAIL()>,
<Function UNI_FACTORY()>,
<Function WETH()>,
<Function addLiquidity()>,
<Function editWhitelist(address[],bool)>,
<Function forceFailByPresaleOwner()>,
<Function forceFailByUnicrypt()>,
<Function getElapsedSinceRound0()>,
<Function getElapsedSinceRound1()>,
<Function getInfo()>,
<Function getPagedWhitelist(uint256,uint256)>,
<Function getUNCLOverride()>,
<Function getUserWhitelistStatus(address)>,
<Function getWhitelistedUserAtIndex(uint256)>,
<Function getWhitelistedUsersLength()>,
<Function init1(uint16,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)>,
<Function init2(address,address,address,uint256,uint256,uint256,address,address,bool)>,
<Function ownerWithdrawTokens()>,
<Function presaleStatus()>,
<Function reserveAllocationWithUNCL()>,
<Function setReferrer(address)>,
<Function setTokenVestingParams(bool,bool,uint256,uint256,uint256)>,
<Function setUNCLAmount(uint256)>,
<Function updateBlocks(uint256,uint256)>,
<Function userDeposit(uint256)>,
<Function userWithdrawBaseTokens()>,
<Function userWithdrawTokens()>
]
所有 Function 姓名
print(
[func.__dict__["fn_name"] for func in cont.all_functions()]
)
[
"BUYERS",
"CONTRACT_VERSION",
"PRESALE_FEE_INFO",
"PRESALE_GENERATOR",
"PRESALE_INFO",
"PRESALE_INFO_2",
"PRESALE_LOCK_FORWARDER",
"PRESALE_SETTINGS",
"PRESALE_VESTING",
"STATUS",
"TOKEN_VESTING",
"UNCL_AMOUNT_OVERRIDE",
"UNCL_BURN_ON_FAIL",
"UNI_FACTORY",
"WETH",
"addLiquidity",
"editWhitelist",
"forceFailByPresaleOwner",
"forceFailByUnicrypt",
"getElapsedSinceRound0",
"getElapsedSinceRound1",
"getInfo",
"getPagedWhitelist",
"getUNCLOverride",
"getUserWhitelistStatus",
"getWhitelistedUserAtIndex",
"getWhitelistedUsersLength",
"init1",
"init2",
"ownerWithdrawTokens",
"presaleStatus",
"reserveAllocationWithUNCL",
"setReferrer",
"setTokenVestingParams",
"setUNCLAmount",
"updateBlocks",
"userDeposit",
"userWithdrawBaseTokens",
"userWithdrawTokens",
]
读取“状态” Function
print(
dict(zip(
[
output["name"]
for output in cont.functions.STATUS().__dict__["abi"]["outputs"]
],
cont.functions.STATUS().call(),
))
)
{
"LP_GENERATION_COMPLETE": False,
"FORCE_FAILED": False,
"TOTAL_BASE_COLLECTED": 0,
"TOTAL_TOKENS_SOLD": 0,
"TOTAL_TOKENS_WITHDRAWN": 0,
"TOTAL_BASE_WITHDRAWN": 0,
"ROUND1_LENGTH": 2400,
"ROUND_0_START": 15973408,
"NUM_BUYERS": 0,
"PRESALE_END_DATE": 0,
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.