Извините, если это звучит как вопрос новичка, но после прочтения большого количества материала у меня есть несколько вопросов.
Во-первых, если контракт уже создан, могу ли я вызвать его функции, если знаю его ABI и адрес? Я думаю, contract(ABI).at(contractAddress)
что делает это, но я нашел описание довольно двусмысленным.
Во-вторых, если я запускаю web3 путем прямого импорта библиотеки без MetaMask или Mist, когда я инициирую вызов функции, кто msg.sender
? Если запущены MetaMask или Mist, является ли msg.sender
текущий кошелек авторизованным?
Наконец, если я хочу создать браузерное Dapp, как мне убедиться, что некоторые функции могут быть вызваны только Dapp и никем другим (даже владельцем)?
Заранее спасибо!
1- если вы знаете адрес и ABI, вы можете вызвать функцию контракта, как описано в официальном документе:
// creation of contract object
var MyContract = web3.eth.contract(abi);
// initiate contract for an address
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');
var result = myContractInstance.myConstantMethod('myParam');
console.log(result) // '0x25434534534'
myContractInstance.myStateChangingMethod('someParam1', 23, {value: 200, gas: 2000}, function(err, result){ ... });
2-msg sender — это адрес отправителя сообщения//вызова, поэтому, если вы используете любой кошелек ethereum, адрес учетной записи отправляется вместе с вашим сообщением (например, ip).
3-для этого используйте модификатор :
modifier isAllowed() {
if (msg.sender != allowed_address) {
throw;
}
_;
}
Алекс Папагеоргиу
Бадр Беллай
Алекс Папагеоргиу
Бадр Беллай
Алекс Папагеоргиу
Бадр Беллай
Алекс Папагеоргиу