solidity刷题知识点ethernaut
发送交易信息的另一种方法123await contract.sendTransactio({data:web3.sha3("pwn()").slice(0,10)});await contract.sendTransaction({value:1});await contract.sendTransaction({data:0xdd365b8b});//函数签名
以太坊数据储存形式的知识
存储插槽的第一项会以低位对齐(即右对齐)的方式储存
基本类型仅使用存储它们所需的字节
如果存储插槽中的剩余空间不足以储存一个基本类型,那么它会被移 入 下一个存储插槽
结构和数组数据总是会占用一整个新插槽(但结构或数组中的各项,都会以这些规则进行打包)
每一个槽有32个字节数字:四位一字节字母:两位一字节布尔值:一个字节bytes32就是32个字节
12345address a;//20 槽0uint8 b;//1 槽0uint c;//32 槽1bool d;//1 槽2//数据的排 ...
solidity基础知识点(三)
solidity基础知识点(三)权限控制合约1234567891011121314151617181920212223242526272829contract AccessControl{ event GrandRole(bytes32 indexed role,address indexed account); event RevokeRole(bytes32 indexed role,address indexed account); //role=>account=>bool mapping(bytes32 => mapping(address => bool))public roles; //字符串的gas消耗比bytes32哈希的消耗要多的多 bytes32 private constant ADMIN=keccak256(abi.encodePacked("ADMIN")); bytes32 private constant USER=keccak256(abi.encodePa ...
web3.js学习笔记
起始公式var Web3= require(‘web3’)const rpcURL = “https://goerli.infura.io/v3/+key“const web3 = new Web3(rpcURL)
消息签名1234let dataHash = "0x"let privateKey = "0x"let sign = web3.eth.accounts.sign(dataHash, privateKey)console.log("signature", sign.signature)
区块信息查询1234567web3.eth.getBlockNumber().then(console.log);web3.eth.getBlock();//'latest','earliest','pending'//1.false默认不返回交易详细信息,true返回详细的交易信息 //2.getBlock中可以通过区块哈希区块高度 ...
solidity基础知识点(二)
solidity基础知识点(二)事件知识点123456789101112contract Event { event Log(string message,uint val); event IndexedLog(address indexed sender,uint val); function example()external{ emit Log("foo",123); emit IndexedLog(msg.sender,123); } event Message(address indexed _from,address indexed _to,string message); function sendMessage(address _to,string calldata message)external{ emit Message(msg.sender,_to,message); }}
继承与多线继承123456 ...
solidity基础知识点(一)
solidity 基础知识(一)报错控制的相关知识点用于检查
12345678910111213141516171819202122232425contract error{//报错控制 function testrequire(uint i)public pure{ require(i<=10,"i>10");//不满足则报错字符串内容 }//gas费与字符长度有关,报错之后会回滚到报错前的状态 function testrevert(uint i)public pure{ if(i>10){ revert("i>10"); }} uint public num=123; function testassert()public view{ assert(num==123); } ...
solidity基础攻击
这是我第一篇文章我的小标签
solidity漏洞1,自毁函数攻击通过selfdestruce自会函数进行强制转账,导致合约中受到7ether,然后卡死
12345678910111213141516171819202122232425262728293031323334// SPDX-License-Identifier: HITpragma solidity^0.8.0;contract EtherGame{#幸运七游戏:第七个传入以太币的人会得到前面的以太币 address public winner; uint TARGET_AMOUNT=7 ether; function deposit()public payable{ require(msg.value==1 ether,"you can only send 1 ether"); uint balances=address(this).balance; require(balances<=TARGET_AMOUNT, ...