Geth Что делает функция eth.contract(abi).at?

На вики-страницах Javascript-API/geth указано, что at([address])функция выполняет следующие действия :

// initiate contract for an address
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');

1. Что здесь означает «создать экземпляр по адресу»?
2. Что происходит, когда atзвонят?
3. Должен ли параметр адреса быть из уже развернутого контракта или из нового адреса? _ 4. Что нужно вернуть?

Когда я использую at(..)консоль geth, подключенную к testrpc, она возвращает undefined. Должно ли это быть так? Например, следуя примеру в этом вопросе с настройкой «testrpc» следующим образом:

testrpc -a 1000
geth attach rpc:http://localhost:8545

РЕДАКТИРОВАТЬ:

Обратите внимание, я думаю, что нашел исходный код :

/**
 * Should be called to get access to existing contract on a blockchain
 *
 * @method at
 * @param {Address} contract address (required)
 * @param {Function} callback {optional)
 * @returns {Contract} returns contract if no callback was passed,
 * otherwise calls callback function (err, contract)
 */
ContractFactory.prototype.at = function (address, callback) {
    var contract = new Contract(this.eth, this.abi, address);

    // this functions are not part of prototype,
    // because we dont want to spoil the interface
    addFunctionsToContract(contract);
    addEventsToContract(contract);

    if (callback) {
        callback(null, contract);
    }
    return contract;
};

/**
 * Should be called to create new contract instance
 *
 * @method Contract
 * @param {Array} abi
 * @param {Address} contract address
 */
var Contract = function (eth, abi, address) {
    this._eth = eth;
    this.transactionHash = null;
    this.address = address;
    this.abi = abi;
};

Ответы (1)

Эта функция создает новый MyContractобъект с полем адреса, установленным в качестве аргумента.

Вы должны передать адрес уже развернутого контракта.

Функция возвращает объект, который можно использовать для вызова функций контракта, указанных в ABI.

Побочных эффектов нет, и метод не проверяет, действительно ли существует контракт, который вы передали. Если нет, вы получите ошибки, когда попытаетесь вызвать методы контракта.

И чтобы уточнить: инициированный объект MyContrcat t является прокси-объектом для развернутого смарт-контракта Ethereum. Он использует базового провайдера подключения web3 для подключения к работающему узлу Ethereum через JSON-RPC API для выполнения удаленных вызовов процедур.