Login
Discover
Waves
Communities
Login
Signup
lemooljiang
@lemooljiang
75
Designer , Poet , Technology enthusiasts
Followers
2368
Following
95
Follow
Resource Credits
Available
Used
Location
Guangzhou
Created
2016-07-16 04:39
RSS Feed
Subscribe
Comments
Blog
Posts
Comments
Communities
Wallet
lemooljiang
starnote
2026-05-25 02:24
RE: Solidity开发指南
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract SimpleStorage { uint storedData; event Set(uint value); // 事件是不需要实现的。 Circle c; // 自定义类型 struct Circle { uint radius; } // 定义一个函数修改器 modifier
$ 0.000
0
lemooljiang
starnote
2026-05-25 02:23
RE: Solidity开发指南
版本申明 引用 合约主体 注释 // SPDX-License-Identifier: MIT //开源协议 pragma solidity ^0.8.20;//申明版本,最低0.8.20 /* * 这是注释段落 * */ import "./first_interface.sol"; //引用文件 contract SimpleStorage { //合约主体 uint storedData;
$ 0.000
0
lemooljiang
starnote
2026-05-25 02:22
RE: Solidity开发指南
事件是合约外部通知,在logs中查看。一般用于dapp监听使用。 事件在合约中可被继承。当他们被调用时,会使参数被存储到交易的日志中 —— 一种区块链中的特殊数据结构。 成本较低 event Set(uint value); emit Set(x); //触发事件 // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract EventTest
lemooljiang
starnote
2026-05-25 02:22
RE: Solidity开发指南
合约代码从区块链上移除的唯一方式是合约在合约地址上的执行自毁操作 selfdestruct 。合约账户上剩余的以太币会发送给指定的目标,然后其存储和代码从状态中被移除。移除一个合约听上去不错,但其实有潜在的危险,如果有人发送以太币到移除的合约,这些以太币将永远丢失。 尽管一个合约的代码中没有显式地调用 selfdestruct ,它仍然有可能通过 delegatecall 或 callcode 执行自毁操作。
lemooljiang
starnote
2026-05-25 02:14
RE: Solidity开发指南
delete操作符可以用于任何变量,将其设置成默认值。 删除字符串时,会将其值重置为空。 删除枚举类型时,会将其值重置为序号为0的值。 如果对动态数组使用delete,则删除所有元素,其长度变为0。 如果对静态数组使用delete,则重置所有索引。 如果对map类型使用delete,什么都不会发生。 如果对map类型中的一个键使用delete,则会删除与该键相关的值。 eg: uint256 public
lemooljiang
starnote
2026-05-25 02:13
RE: Solidity开发指南
error Myerror(address caller, uint i); function test(uint _i) public view { if(_i > 10) { revert Myerror(msg.sender, _i); } }
lemooljiang
starnote
2026-05-25 02:13
RE: Solidity开发指南
Assert, Require, Revert assert(bool condition) ⽤于判断内部错误,条件不满⾜时抛出异常.函数只能用于测试内部错误,并检查非变量。 用于pure函数,会对用户惩罚,扣光gas require(bool condition) require(bool condition, string message) //提供错误信息。
lemooljiang
starnote
2026-05-25 02:12
RE: Solidity开发指南
library, 标准的函数,可以反复使用。调用时类似delegatecall // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; library mathlib { function plus(uint a, uint b) public pure returns (uint) { uint c = a + b; assert(c>=a
lemooljiang
starnote
2026-05-25 02:12
RE: Solidity开发指南
import * as symbolName from "filename"; import "filename" as symbolName; 然后所有函数都以symbolName.symbol格式提供。 import 相当于接口,导入其它合约的函数,不过函数的执行环境不变,仍在原有合约中执行。例如:B中导入A,A.send()仍会在A的环境中执行。 import
lemooljiang
starnote
2026-05-25 02:10
RE: Solidity开发指南
参考 abi.encodeWithSignature(....)的前四个字节就是函数选择器,也就是msg.sig, 也可这这样计算 bytes4(keccak256(bytes(_func))) 这种方法可以直接调用合约的方法 eg: addr.call(abi.encodeWithSignature("transfer(address,uint256)", SomeAddress,
lemooljiang
starnote
2026-05-24 14:31
RE: Solidity开发指南
使用修饰器modifier可以轻松改变函数的行为。 例如,它们可以在执行函数之前自动检查某个条件。 contract owned { address owner; //修饰器所修饰的函数体会被插入到特殊符号 _; 的位置。 modifier onlyOwner { require( msg.sender == owner, "Only owner can call this function."
lemooljiang
starnote
2026-05-24 14:30
RE: Solidity开发指南
memory 值传递,临时变量,EVM内存中 storage 引用传递,指针,会改变原变量的值,区块链中 // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract storage_demo { struct User { string name; uint8 age; } User adminuser; function
lemooljiang
starnote
2026-05-24 14:28
RE: Solidity开发指南
数据存储位置分析 memory storage calldata memory 存储在EVM内存中,主要有局部变量,函数参数,值传递 storage 存储在区块链中,主要有状态变量,复杂变量,数组,引用传递,指针 calldata,用来存储函数参数,是只读的,不会永久存储的一个数据位置。外部函数的参数(不包括返回参数)被强制指定为calldata。效果与memory差不多,但更为节约gas。 int[]
lemooljiang
starnote
2026-05-24 14:27
RE: Solidity开发指南
transfer 和 send异同: 两者都可以转移以太币,但尽量使用transfer。都有2300gas的限制。 在转帐时send异常时不会发生错误,只会返回一个布尔值(false),所以要使用判断函数assert(addr.send(1 ether)) address payable _to = 0xddsddfxxx; //有2300gas的限制 _to.transfer(1 ether);
lemooljiang
starnote
2026-05-24 14:24
RE: Solidity开发指南
payable view pure: payable 可以接受以太币 view 只看不修改(状态变量) pure 纯函数,不读也不写(状态变量)
lemooljiang
starnote
2026-05-24 14:24
RE: Solidity开发指南
有四个关键词:public private external internal public - 任意访问 private - 仅当前合约内 internal - 仅当前合约及所继承的合约 external - 仅外部访问(在内部也只能用外部访问方式访问) 当使用public 函数时,Solidity会立即复制数组参数到内存,
lemooljiang
starnote
2026-05-24 14:22
RE: Solidity开发指南
receive接收以太币, 无名称,无参数,无返回值 一个合约最多有一个 receive 函数, 声明函数为: receive() external payable {} Fallback 回退函数,无名称,无参数,无返回值 合约可以最多有一个回退函数。函数声明为: fallback () external [payable] {} receive() external payable { totalAmount
lemooljiang
starnote
2026-05-24 14:22
RE: Solidity开发指南
函数是完成特定任务的自包含代码模块。与其他 web3 编程语言一样,Solidity 允许开发者通过使用函数编写模块化代码,以消除重新编写相同代码片段的冗余。相反,开发者可以在程序中必要时调用该函数。 function function-name(parankust...) modifiers returns(returnlist...) { // statements } // 使用 function
lemooljiang
starnote
2026-05-24 14:21
RE: Solidity开发指南
手册 在全局命名空间中已经存在了(预设了)一些特殊的变量和函数,他们主要用来提供关于区块链的信息或一些通用的工具函数。可以把这些变量和函数理解为Solidity语言层面的(原生)API 。 blockhash(uint) :指定区块的区块哈希——仅可用于最新的 256 个区块且不包括当前区块 block.coinbase ( address ): 挖出当前区块的矿工地址 block.difficulty
lemooljiang
starnote
2026-05-24 14:17
RE: Solidity开发指南
默认单位是秒 block.timestamp //1592697341 单位为秒的时间戳 1 == 1 seconds 1 minutes == 60 seconds 1 hours == 60 minutes 1 days == 24 hours 1 weeks == 7 days eg: return x * 1 hours + y * 1 minutes; //3660
← Latest
Older →