selfdestruct()
вкарване на крипто в smart contract, независимо че няма payable
функции
В момента, в който деплойнем СК на мрежа, понеже всички записи са immutable, не можем да го манипулираме
Можем обаче да го блокираме със selfdestruct
примитива
payable
функцииSide note
proxy smart contract;
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.5.0 <0.9.0;
contract A {
uint256 number = 10;
function getNum() public view returns(uint256) {
return number;
}
function destroySC(address payable _addr) public {
selfdestruct(_addr);
}
function getBalance() public view returns(uint256) {
return address(this).balance;
}
function receive() external payable { }
function fallback() external payable { }
}
contract B {
function getBalance() public view returns(uint256) {
return address(this).balance;
}
}
Ако се опитаме да достъпим property на унищожен СК, би трябвало да получим грешка:
oracle
е вид СК, който може да изпълни транзакция извън ledger-а
използва се, за да си взаимодействаме със СК, предоставя интерфейс към функциите, които ни интересуват
compile time creation, важи и за байткода
ledger world
A -> B // само подписване, заявката не напуска ledger-а
отвън $\to$ ledger world - трябва ни ABI, за да укажем как да се осъществи комуникацията
[
...
{ // една функция
"inputs": [],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
...
]
60806040525f600155603260025f6101000a81548160ff0219
16908360ff160217905550600a600260016101000a81548160ff...
всеки ethereum member може да пусне request for comment
ERC721 - NFT
Side note
Ethereum Magicians
хора, които директно са въвлечени в разработката
В публичните мрежи е много трудно да се стигне до този случай, много изчислителна мощ е необходима
Miner генерира блок, където той включва транзакция от адрес A към адрес B, като и двата адреса принадлежат на него и засега не го обявява. Пуска същата транзакция от A към C(принадлежи на този, на когото miner-ът би трябвало да плати). Ако собственикът на C приеме транзакцията без тя да бъде потвърдена, miner-ът може да излъчи блока, в който е включена първата транзанкция, което прави втората невалидна.
Side note
selfish mining
tx.origin
state fileds $\to$ events $\to$ modifiers $\to$ constructor $\to$ fallback function $\to$ receive functions $\to$ external functions $\to$ public functions $\to$ internal $\to$ private
В DAO hack случая е нарушен:
tx.origin
for authorization❗ infura - услуга, един node за публична употреба, ако нямаме node няма как да се вържем с мрежата и да interact-ваме с протокола