![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
solidity
blockchain_yhj
1986739692@qq.com
18852897525@163.com
展开
-
调用多个NFT的代理合约应该怎么设计?
需求:项目方由10个NFT合约,需要不定时的去某个合约中 转账/mint 特定的ID到特定用户。原创 2024-01-12 18:36:52 · 803 阅读 · 3 评论 -
区块链是怎么存储数据的?
每个块都是有大小限制的新的数据存储单元,当前数据不到上限,那么都可以添加进块。当前数据达到了上限,那么就得分表/分块,超限的那部分数据就需要等待下个区块存储原创 2024-01-12 16:07:33 · 800 阅读 · 2 评论 -
代币中的decimal精度代表了什么
ERC代币的精度表示什么?原创 2024-01-11 16:24:29 · 1153 阅读 · 2 评论 -
solidity.is继承合约问题
继承原创 2023-02-28 10:34:22 · 211 阅读 · 1 评论 -
简单的Owner合约
Owner 合约原创 2023-02-28 10:17:47 · 159 阅读 · 1 评论 -
multi-sig SC
多签合约原创 2022-06-10 15:45:16 · 130 阅读 · 1 评论 -
智能合约部署在测试网,并互相调用
部署在ropsten浏览器:https://ropsten.etherscan.io/address/0xA98D40001cf6f3859dE29fbFDFE13eBa2C940601合约RopstenNumber// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.0 <0.9.0;contract RopstenNumber {uint256 c; function getNumber() publ原创 2022-04-26 10:42:57 · 620 阅读 · 1 评论 -
通过合约地址 和 接口 调用另一个合约的方法
A 合约:// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.0 <0.9.0;contract Number {uint256 c; function getNumber() public view returns (uint) { return c; } function setNumber(uint num) public { c=num;原创 2022-04-17 22:08:41 · 1011 阅读 · 0 评论 -
transfer和 send
send()成员函数addr.transfer(eth) 等价于 require(addr.send(eth))send returns bool,返回bool类型,通过require判断transaction: Exception if fails,会返回错误提示推荐用transfer,因为有报错提示send错了,因为默认不报错,所以用断言assert(towho.send(1 ether));...原创 2022-04-13 20:10:50 · 274 阅读 · 1 评论 -
重入攻击的合约
pragma solidity ^0.4.18;contract Reentrance { mapping(address => uint) balances; function donate(address _to) public payable { balances[_to] = balances[_to]+msg.value; } function balanceOf(address _who) public view returns (uint balan原创 2022-04-13 15:16:22 · 163 阅读 · 1 评论 -
合约中实现数组的删减,从合约中删除数据
pragma solidity ^0.8.0;contract ExampleApp { string[] myArray; function add(string memory x) public { myArray.push(x); } function del(string memory x) public { for (uint j = 0; j < m原创 2022-04-13 11:35:10 · 261 阅读 · 1 评论 -
fallback 和 receive 回退函数
//纯转账调用receiver回退函数,例如对每个空empty calldata的调用// 除了纯转账外,所有的调用都会调用fallback function.// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.0;// 向合约账户转账 contract terans{// 向合约账户转账 evevent TransEvent(address,uint);//trigger recevier function//纯转账调用r原创 2022-04-13 11:33:02 · 698 阅读 · 1 评论 -
通过selfdestruc退款,导致游戏转账合约没有赢家
selfdestruct的用法address payable addr = payable(address(etherGame)); selfdestruct(addr);call合约转账(bool sent, ) = msg.sender.call{value: address(this).balance}("");// SPDX-License-Identifier: MITpragma solidity ^0.8.0; // The goal of this game is原创 2022-04-13 11:25:55 · 193 阅读 · 1 评论 -
实现合约接口并且合约间互相调用
1 interface 修饰接口合约通过 is关键字实现接口,通过override关键字改写方法通过实现的合约地址实现多个合约间的互相调用pragma solidity ^0.8.0;interface Caller{ function repeat(address _count)external;}contract CallerImpl is Caller{// input countImpl's address contract address function rep原创 2022-04-13 11:10:38 · 513 阅读 · 1 评论 -
solidity实现账户地址向合约账户转账
一个合约最多有一个 receive 函数, 声明函数为: receive() external payable { … }不需要 function 关键字,也没有参数和返回值并且必须是 external 可见性和 payable 修饰. 它可以是 virtual 的,可以被重载也可以有 修改器modifier 。在对合约没有任何附加数据调用(通常是对合约转账)是会执行 receive 函数. 例如 通过 .send() or .transfer() 如果 receive 函数不存在, 但是有payab.原创 2021-11-02 19:45:42 · 6946 阅读 · 4 评论 -
Truffle安装
truffle是一个世界级的开发环境和测试框架 可以创建项目、执行测试、安装依赖、部署发布项目内置智能合约编译、链接、部署和字节码管理,简化编译的流程和难度自动化的智能合约测试功能合约部署和迁移 迁移就是将私链中测试完好的合约发布到公链中,更改了ip和端口,truffle支持脚本化的可扩展的部署和迁移框架通过配置IP和端口实现网络管理,选择以太坊的主网、测试网络、私有网络等使用ERC190标准,EthPM和NPM管理包通过控制台直接和合约交互,进行测试与调试可以在truffle中执行脚本.原创 2021-11-02 14:38:42 · 10471 阅读 · 1 评论 -
solidity数据类型(四)storage memory calldata modifier前置条件 继承 接口合约 导入库 using...for solc编译
1 数据存储位置数据测存储类型有storage 和 memory函数的传入参数和返回参数 都是 memory类型(external函数的入参为calldata类型,只可读,不可重写)函数局部变量、合约状态变量都是storage类型memory总是会重新分配内存,不会释放内存,当有重名未使用的变量时,不会利用前者内存空间,而会重新分配新的空间memory数据的位置标注可以修改,数据可读可修改storage存储在EVM的storage区域,在交易执行之后,storage区域的数据会写回到合原创 2021-10-20 14:52:10 · 1977 阅读 · 1 评论 -
solidity数据类型(三)msg tx hash kill payable new
1 区块与交易信息区块相关属性区块的矿工地址、区块号、gaslimit、难度值、时间戳等blockhash(uint) 取最新的256个区块号对应的hash,但不包括当前区块的block.coinbase/block.difficulty/block.gaslimit/block.number/block.timestamp/now 都是取当前区块的相关信息// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.4.0;contra原创 2021-10-19 17:26:58 · 2210 阅读 · 1 评论 -
solidy数据类型(二)call callcode delegatecall tranfer delete array
1 数组–固定/动态数组1.1 固定字节数组固定字节数组按照占用的字节长度分为 bytes1、bytes2…bytes32固定字节数组只能读取数据 不能修改数据索引访问 array[index]固定字节数组转换:高字节转换成低字节 低位截取低字节转换成高字节 低位补0// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.7.0 <0.9.0;contract byteTest { bytes2 public原创 2021-10-18 21:43:49 · 975 阅读 · 1 评论 -
solidity数据类型 external internal view pure enum struct mapping
1 基础运算1.1 三目运算符// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.0;contract threeEyeTest{ function tete(bool acc) public pure returns(string memory){ return acc?"one":"two"; }}1.2 循环支持for(){}、while(){}、do{}while();使用contin原创 2021-10-15 21:35:36 · 587 阅读 · 0 评论 -
solidity异常处理 revert require assert
1 if…{throw}传统方法:采用 throw 和 if … throw 模式例如合约中有一些功能,只能被授权为 拥有者 的地址才能调用。这种强制授权处理方式很普遍:contract HasAnOwner {address owner;function useSuperPowers(){if (msg.sender != owner) { throw; }// do something only the owner should be allowed to do}}如果 use原创 2021-10-12 15:18:21 · 725 阅读 · 1 评论 -
solidity关键字 view pure constant
// SPDX-License-Identifier: GPL-3.0//pragma solidity ^0.8.0;pragma solidity ^0.8.0;// contract StateVariableContract{// string name;// uint32 id;// function variableTest(uint8 inAgrs) public returns (uint8 outArgs){// uint8 fun原创 2021-10-12 14:38:02 · 261 阅读 · 1 评论