简体   繁体   English

如何获得合同创建者的地址

[英]How to get the address of the contract creator

如果我仅知道合同地址和合同接口(ABI),我试图找出是否可以获取合同创建者的地址?

There is no explicit web3.js method for finding the contract creator address. 没有用于查找合同创建者地址的显式web3.js方法。 If you wanted to accomplish this with web3.js, you would essentially have to loop through all the previous blocks and transactions subsequently searching for the transaction receipts via web3.eth.getTransactionReceipt . 如果您想使用web3.js完成此操作,则基本上必须遍历所有先前的块和交易,然后再通过web3.eth.getTransactionReceipt搜索交易收据。 This will return a contractAddress property which can be compared to the contract address you have. 这将返回一个contractAddress属性,该属性可以与您拥有的合同地址进行比较。

Here is an example utilizing web3.js (v1.0.0-beta.37): 这是一个使用web3.js(v1.0.0-beta.37)的示例:

const contractAddress = '0x61a54d8f8a8ec8bf2ae3436ad915034a5b223f5a';

async function getContractCreatorAddress() {
    let currentBlockNum = await web3.eth.getBlockNumber();
    let txFound = false;

    while(currentBlockNum >= 0 && !txFound) {
        const block = await web3.eth.getBlock(currentBlockNum, true);
        const transactions = block.transactions;

        for(let j = 0; j < transactions.length; j++) {
            // We know this is a Contract deployment
            if(!transactions[j].to) {
                const receipt = await web3.eth.getTransactionReceipt(transactions[j].hash);
                if(receipt.contractAddress && receipt.contractAddress.toLowerCase() === contractAddress.toLowerCase()) {
                    txFound = true;
                    console.log(`Contract Creator Address: ${transactions[j].from}`);
                    break;
                }
            }
        }

        currentBlockNum--;
    }
}

getContractCreatorAddress();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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