首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏极客编程

    solidity智能合约

    智能合约 Solidity里的智能合约是面向对象语言里的类。它们持久存放在状态变量和函数中,(在里面)可以通过solidity修改这些变量。 创建合约       合约可以从“外部”创建,也可以由Solidity合约创立。在创建合约时,它的构造函数(函具有与合约名称同名的函数)将被执行。    MyContract = web3.eth.contract(abiArray);// deploy new contractvar contractInstance = MyContract.new(   10 var contractInstance = MyContract.new(   10,   {from: myAccount, gas: 1000000} ); 在内部,在合约的代码后要接着有构造函数的参数 在下面的代码中,Solidity会报错:“继承关系的线性化是不可能的”。

    1.6K30发布于 2018-09-04
  • 来自专栏code人生

    solidity 合约入门

    入门合约1 下面是一个简单的 Solidity 合约示例,它实现了一个简单的数字存储合约,允许用户设置和获取一个整数值。这个合约将帮助你了解 Solidity 合约的基本结构和语法。 // 指定 Solidity 的版本 pragma solidity ^0.8.0; // 定义一个合约 contract SimpleStorage { // 声明一个状态变量,用于存储整数值 这个合约包括以下要点: 1.使用 pragma solidity 指令指定 Solidity 的版本。2.声明了一个名为 storedData 的状态变量,用于存储整数值。 要使用这个合约,你需要执行以下步骤: 1.部署合约:使用以太坊钱包或 Solidity 开发工具,将这个合约部署到以太坊网络上。2.设置值:使用合约的拥有者地址调用 set 函数,设置存储的整数值。 这只是一个非常简单的示例,但它涵盖了 Solidity 合约的基本结构,包括状态变量、构造函数、函数、事件等。你可以根据需要扩展这个示例,创建更复杂的智能合约

    59620编辑于 2023-10-19
  • 来自专栏code人生

    Solidity合约继承

    Solidity中,继承是一种使一个合约可以获取另一个合约的属性和方法的方式。这是一种代码复用的方法,可以使你的代码更加模块化,更易于理解和维护。 在Solidity中,一个合约可以继承多个合约,这些被继承的合约被称为父合约或基础合约。继承的语法是在子合约的定义后面使用is关键字,然后列出所有的父合约。 当你部署一个子合约时,Solidity会按照在子合约中列出父合约的顺序来调用这些constructor函数。 super 在Solidity中,super关键字是一个特殊的引用,它用于访问被当前合约重写的函数。当你在一个函数中使用super关键字时,Solidity会查找继承链中的下一个实现。 在Solidity中,super关键字的调用顺序是由C3线性化算法确定的。这是一个在Python中用于解决多重继承问题的算法,Solidity也采用了这个算法来确定合约的继承顺序。

    36010编辑于 2024-05-28
  • 来自专栏区块链与Web3.0

    Solidity开发智能合约

    0 Solidity和智能合约Solidity开发可运行的智能合约步骤:源代码通过编译成字节码(Bytecode),同时会产生二进制接口规范(ABI)通过交易将字节码部署到以太坊网络,部署成功会产生一个智能合约账户通过 web3.js+ABI去调用智能合约中的函数来实现数据的读取和修改下面开始简单例子入手Solidity。 图形界面的版本,下载地址:https://github.com/trufflesuite/ganache/releasesGanache常见命令参数调整挖矿时间(Ganache默认是在交易产生时进行挖矿)://10 秒产生一个区块ganache-cli -b 10指定主机端口与网络ID://指定IP,端口及网络IDganache-cli -h 127.0.0.1 -p 8545 -i 8888设置gas价格和gas 合约示例,它实现了电子投票的功能。

    69210编辑于 2024-07-28
  • 来自专栏code人生

    Solidity:在合约中创建其它合约

    Solidity中,new关键字用于创建一个新的智能合约实例。当你使用new关键字创建一个新的合约实例时,Solidity会在区块链上部署一个新的合约,并返回新合约的地址。 然后,它会返回新合约的地址,并将这个地址赋值给myContract变量。 需要注意的是,使用new关键字创建新的合约实例会消耗gas,因为它涉及到在区块链上部署新的合约。 示例 // SPDX-License-Identifier: MIT pragma solidity ^0.8.25; contract Car { address public owner; 这两个状态变量都被声明为public,因此Solidity会自动为它们生成getter函数。 •CarStore合约代表一个汽车商店,它有一个状态变量cars,用于存储商店中的所有汽车。cars变量是一个Car合约的数组,每个元素都是一个Car合约的实例。

    54210编辑于 2024-05-30
  • 来自专栏code人生

    Solidity合约调用方式

    Solidity中,合约之间的交互是通过调用进行的。以下是一些主要的合约调用方式: 1. 内部直接调用 一个合约可以通过调用自己的内部函数或私有函数来进行内部调用。 外部调用 外部调用是最常见的合约调用方式。一个合约可以通过调用另一个合约的公共函数或外部函数来进行外部调用。这种调用方式会创建一个新的执行上下文,被调用的合约有自己的this和msg.sender。 注意事项 在Solidity中进行外部调用时,有几个重要的注意事项: 1.检查调用结果:外部调用可能会失败,例如,被调用的合约不存在,或者调用的函数抛出异常。 5.注意权限控制:在调用其他合约的函数时,你需要注意权限控制。例如,如果你调用的是另一个合约的公共函数,你需要确保该函数可以被你的合约调用。 如果你调用的是另一个合约的私有函数或内部函数,你需要确保你的合约有权限调用这些函数。

    60710编辑于 2024-05-29
  • 来自专栏前端领域

    【区块链Solidity】智能合约Solidity介绍

    目录 智能合约 Solidity语言简介  Solidity语言特性 ---- 智能合约 智能合约的英文是Smart Contract 最早是尼克丶萨博在1995年就提出了智能合约的概念~就是将法律条文写成可执行代码 以太坊是区块链与智能合约的完美结合,通过编写智能合约可以实现强大的功能,实现去中心化的应用开发。   现在智能合约已经扩展到所有的区块链平台,很多时候人们把超级账本Hyperledger,EOS等区块链平台的程序也称为‘智能合约’ 智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转 Solidity,就是目前最常用的用来编写智能合约的语言。 Solidity语言简介   Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。 Solidity语言特性  Solidity文件的后缀名为.sol 是一种“强类型的编程语言”,必须先定义后复制再使用。

    1.3K20编辑于 2022-11-28
  • 来自专栏陈冠男的游戏人生

    智能合约solidity语法(二)

    映射本质上是存储和查找数据所用的键值对,我们看一个例子: mapping (uint => string) userIdToName;//这个例子中我们可以通过 id 去存储或查找用户名 msg.sender msg.sender 是 solidity function test(string _name) returns (string){ retuire(keccak256(_name) == keccak256("yichen")); //solidity welcome2 is welcome { function hello() public returns (string) { return "hello"; } } 引入(Import) solidity 也支持 import(solidity 文件后缀是 sol) import ". /sayhello.sol"; Storage与Memory solidity 中有两个可以存储变量的地方 Storage 与 Memory Storage 变量是永久的存储在区块链中的变量 Memory

    89641发布于 2020-05-14
  • 来自专栏code人生

    Solidity:存钱罐合约

    // SPDX-License-Identifier: MIT pragma solidity ^0.8.25; contract CoinBank { // 声明一个变量来存储合约的所有者 immutable关键字表示这个变量的值在合约创建时被设置,然后就不能再改变。2.constructor:这是一个构造函数,它在合约创建时运行。在这个函数中,我们将owner变量设置为合约的创建者。 在这个修饰符中,我们使用require函数来确保只有合约的所有者才能运行函数。4.deposit:这是一个公开的函数,任何人都可以调用它来向合约发送以太币。发送的以太币会自动添加到合约的余额中。 5.withdraw:这是一个外部函数,只有合约的所有者才能调用它。这个函数会将合约的所有余额发送给所有者。 这里使用了低级别的.call函数来发送以太币,这是因为在Solidity 0.8.x版本中,.transfer和.send函数已经被废弃。

    21010编辑于 2024-06-11
  • 来自专栏Ethereum

    Solidity:代理模式升级合约

    Solidity中,通过代理模式来升级智能合约是一种常见且有效的做法,它允许在不中断现有合约功能的情况下进行更新。 // SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;// 初始版本的合约contract MyContract { // SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;// 升级后的合约版本contract MyContractV2 { 代理合约创建一个代理合约,用于转发调用到实际的合约实现。代理合约通常保持与初始版本相同的接口,并持有一个指向当前实现版本的地址。 // SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;// 代理合约contract MyContractProxy {

    60010编辑于 2024-08-01
  • 来自专栏陈冠男的游戏人生

    智能合约solidity语法(一)

    版本声明 首先,所有的 solidity 源码前面必须标明编译器版本 pragma solidity ^0.4.18; 这个就声明了版本是 0.4.18 到 0.5.0 的编译器中是可以工作的 合约 写一个合约的基本框架是: contract name{} 变量 下面来看一下怎么声明变量,状态变量会永久的保存在合约里 uint 表示无符号整数,int 表示有符号的 在 solidity 里面 uint 类型的 id struct Student{ string name; uint id;} 数组 solidity 支持两种类型的数组,静态数组、动态数组 uint 类型的固定长度为 10 的静态数组 id uint[10] id; uint 类型的长度不定的动态数组 id uint[] id; 也可以建立一个结构体类型的数组 students Student[] students; 函数 习惯上, 注意,日志和事件的数据是不能被合约访问的,即便是创建它们的合约也不行(不然常规的数据存储就没意义了) event IntegersAdded(uint x, uint y, uint result);

    1.5K41发布于 2020-05-20
  • 来自专栏深入浅出区块链技术

    智能合约语言 Solidity 教程系列8 - Solidity API

    这是Solidity教程系列文章第8篇介绍Solidity API,它们主要表现为内置的特殊的变量及函数,存在于全局命名空间里。 Solidity 系列完整的文章列表请查看分类-Solidity。 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 欢迎订阅区块链技术专栏阅读更全面的分析文章。 Solidity API 主要表现为Solidity 内置的特殊的变量及函数,他们存在于全局命名空间里,主要分为以下几类: 有关区块和交易的属性 有关错误处理 有关数学及加密功能 地址相关 合约相关 下面详细讲解下 因为私链实现了一种预编译合约合约要在收到第一个消息后才会真正存在(虽然他们的合约代码是硬编码的)。而向一个不存在的合约发送消息,所以才会导致Out-Of-Gas的问题。 合约相关 this(当前合约的类型): 表示当前合约,可以显式的转换为Address selfdestruct(address recipient): 销毁当前合约,并把它所有资金发送到给定的地址。

    86320发布于 2018-07-23
  • 来自专栏Pseudoyu

    Solidity 智能合约开发 - 基础

    智能合约Solidity 语言 智能合约是运行在链上的程序,合约开发者可以通过智能合约实现与链上资产/数据进行交互,用户可以通过自己的链上账户来调用合约,访问资产与数据。 针对上述的一些合约编写的问题,Solidity 也都有相对完善的解决方案支持,后续会详细讲解。 for (uint i = 0; i < 10; i++) { // 业务逻辑 } uint j; while (j < 10) { j++; } 合约 构造器 Solidity 的 constructor function testRequire(uint _i) public pure { require(_i > 10, "Input must be greater than 10"); } revert function testRevert(uint _i) public pure { if (_i <= 10) { revert("Input must be greater than 10")

    1.2K20编辑于 2023-04-11
  • 来自专栏深入浅出区块链技术

    解构 Solidity 合约 #4: 函数体

    我们正在解构一个简单的Solidity 合约[5]的EVM 字节码[6]。 我们已经走过了很长的路,不是吗? 让我们回到 Remix,像以前一样编译和部署合约,然后调用balanceOf函数,把部署合约时用的地址作为参数。 这应该返回数字10000,因为它是最初赋值给构造函数代码中部署合约的地址的,我们在部署合约时使用了这个地址。 好了,现在让我们来调试一下这个交易。 原文链接:https://blog.openzeppelin.com/deconstructing-a-solidity-contract-part-v-function-bodies-2d19d4bef8be Tiny 熊: https://learnblockchain.cn/people/15 [4] 前面的文章: https://learnblockchain.cn/article/5190 [5] Solidity

    99330编辑于 2023-01-09
  • 来自专栏终有链响

    solidity智能合约如何实现跨合约调用函数

    背景 比如现在有一个需求、我需要通过外部合约获取BRC20 token的总交易量。那么我需要在brc20的转账函数里面做一些调整,主要是两个函数内统计转移量。然后再提供外部获取函数。 name = "cor4 tokne"; _symbol ="cor4" ; _decimals = 18; _totalSupply = 1000000000000000 *10 ] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } // 添加一个视图函数,允许其他合约读取 _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); } } 3、外部合约调用示例 external view returns (uint256); } contract queryErc20 { Iquery public factory; //注入合约

    54010编辑于 2024-07-29
  • 来自专栏Netkiller

    Solidity 0.4.23 代币合约的变化

    Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com> 文档始创于2018-02-10 netkiller-ebook (微信扫描二维码) QQ:13721218 请注明“读者” QQ群:128659835 请注明“读者” 网站:http://www.netkiller.cn 最近以太坊创建代币合约政策有些变化 ,部署合约后需要 "verify and publish " 这个步骤必须穿墙,否则直接 error 500 错误 另外 Solidity 0.4.23 也有许多变化 1. 事件调用,需要 emit 关键字 emit Transfer(msg.sender, _to, _value); pragma solidity ^0.4.23; contract NetkillerToken

    1.2K100发布于 2018-04-23
  • 来自专栏丑胖侠

    solidity智能合约implicit conversion异常

    问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题。 tokenContract.balanceOf(address(this)) >= _numberOfTokens);(issue is here) 原文链接:https://www.choupangxia.com/2019/07/16/solidity 智能合约implicit-conversion异常/ ----

    72950发布于 2019-08-01
  • 来自专栏深入浅出区块链技术

    部署Solidity智能合约到Solana

    译文出自:登链翻译计划[1] 译者:翻译小组[2] 校对:Tiny 熊[3] 部署Solidity智能合约到Solana 什么是Solana,你如何将Solidity智能合约部署到Solana? 它支持像Ethereum那样的智能合约,他们称之为程序。你可以使用Rust开发[4]这些程序,但现在有一个新的项目,将Solidity编译为Solana程序。 换句话说,你现在就可以把你用Solidity写的合约部署到Solana上了。 当然,Solana上的交易成本只是以太坊上的一小部分。那么,这一切是如何进行的呢? Turbine[9] -- 一个区块传播协议 Gulf Stream[10] -- 无Mempool的交易转发协议 Sealevel[11] -- 并发的智能合约运行时间 Pipelining[12]- 禁用工作区的solidity插件 现在让我们拿一个ERC20合约[21]来实验,这里的代码是Openzeppelin的1:1拷贝。 你还需要初始化软件包并安装所需的依赖项。

    2.6K10编辑于 2021-12-31
  • 来自专栏丑胖侠

    solidity 智能合约之间的调用

    智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用。本篇文章带大家通过具体示例来了解一下智能合约之间的调用。 同sol文件的智能合约调用 在下面的智能合约中,Demo1和Demo在同一个文件中,可进行同时编译,然后逐个发布。 pragma solidity ^0.5.10; contract Demo1{ uint public data; function setData(uint _ pragma solidity ^0.5.10; contract Demo1{ function setData(uint _data) public; } contract Demo3{ 原文链接:https://www.choupangxia.com/2019/07/30/solidity-智能合约之间的调用/

    3K20发布于 2019-08-14
  • 来自专栏Java开发者杂谈

    solidity开发2-合约结构

    合约solidity中的合约可以类比看做java等面向对象语言中的类。合约可以包含状态变量、函数、函数修饰符、事件、错误、结构体、枚举类型等等。 还有一些特殊的合约可以被称作库或者接口 状态变量 状态变量指的是永久存在区块链合约中的变量。 state variables // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.0 <0.9.0; contract SimpleStorage 通常定义在合约内部,也可以定义在合约外部。 functions // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.1 <0.9.0; contract SimpleAuction

    35940编辑于 2022-05-06
领券