繁体   English   中英

如何从合约地址和abi获取智能合约调用地址

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM