Solidity

✍ dations ◷ 2025-08-13 21:22:49 #特定领域语言,静态类型编程语言

Solidity是一种合约导向式语言,被应用于各种不同的区块链平台,其主要开发者为加文·伍德(英语:Gavin Wood),Christian Reitwiessner,Alex Beregszaszi,Liana Husikyan,Yoichi Hirai和其他几位早期以太坊核心贡献者。Solidity 可使程序开发人员能在区块链上(例如以太坊)编写智能合约。

Solidity的语法概念最早是由加文·伍德(英语:Gavin Wood)在2014年提出,后期则以Christian Reitwiessner所领导的以太坊团队Solidity接手开发。该语言是针对以太坊虚拟机(EVM)所设计的四种语言之一(其他的还有Serpent,LLL,Viper(实验中)和Mutan(已弃用))。有关这些语言的更多信息,请参阅以太坊编程语言。

Solidity是目前在以太坊及其他以太坊竞争平台中的主要编程语言,例如Monax及其Burrow Hyperledger的区块链就是使用Tendermint完成共识机制。 SWIFT亦已经使用Solidity在Burrow上完成了概念验证。

康奈尔大学的研究人员指出,Solidity即是导致DAO在2016年被黑客攻击的部分原因之一。他表示:“这实际上并不是DAO合同本身的缺陷或漏洞;技术上来说,DAO确实是在EVM上如预期般地被运行,反而是Solidity将安全上的漏洞引入了合约之中,而这些漏洞不仅没被开发社群察觉,Solidity语言的设计者们也忽略了。

Solidity是一种静态类型的编程语言,用于开发在EVM上运行的智能合约。 Solidity被编译为可在EVM上运行的字节码。 借由Solidity,开发人员能够编写出可自我运行其欲实现之商业逻辑的应用程序,该程序可被视为一份具权威性且永不可悔改的交易合约。对已具备程序编辑能力的人而言,编写Solidity的难易度就如同编写一般的编程语言。

Gavin Wood最初在规划Solidity语言时引用了ECMAScript的语法概念,使其对现有的Web开发者更容易入门;与ECMAScript不同的地方在于Solidity具有静态类型和可变返回类型。而与目前其他EVM目标语言(如Serpent和Mutan)相比,其重要的差异在于Solidity具有一组复杂的成员变量使得合约可支持任意层次结构的映射和结构。Solidity也支持继承,包含C3线性化多重继承。 另外还引入了一个应用程序二进制接口(ABI),该接口(ABI)可在单一合同中实现多种类型安全的功能。 

以下为使用Solidity编写的程序示例:

contract GavCoin{  mapping(address=>uint) balances;  uint constant totalCoins = 100000000000;  /// Endows creator of contract with 1m GAV.  function GavCoin(){      balances = totalCoins;  }  /// Send $((valueInmGAV / 1000).fixed(0,3)) GAV from the account of $(message.caller.address()), to an account accessible only by $(to.address()).  function send(address to, uint256 valueInmGAV) {    if (balances >= valueInmGAV) {      balances += valueInmGAV;      balances -= valueInmGAV;    }  }  /// getter function for the balance  function balance(address who) constant returns (uint256 balanceInmGAV) {    balanceInmGAV = balances;  }}

开发平台

  • Remix,Solidity官方IDE
  • Microsoft Visual Studio
  • ConsenSys Enterprise
  • Tendermint 
  • AWS的ErisDB

区块链平台

Solidity可在下列平台中运作:

相关

  • 死亡细胞死亡(Cell death)是描述生物细胞永久中止运作生理功能的状态。细胞死亡可能起因于个体计划性的细胞死亡,或是因疾病或创伤导致细胞不可逆的损伤而死亡。Category:Medical a
  • 骑士骑士或称武士,原为欧洲中世纪受过正规军事训练的骑兵,后来成为一种贵族阶层。骑士的头衔来自另一位骑士或是领主的册封,骑士除了能获得自己的封地之外,也必须为所效忠的领主作战
  • 大写高度在西文字体排印学中,大写字高(英语:Cap height)是指某种字体中,位于基线(baseline)以上的大写字母的高度。尤其指相对平顺的字母“H”和“I”的高度。因为圆型的字母“O”和尖形字
  • 咽部人类的咽(pharynx),又称咽头,是颈部的一个部分,为一条连接口腔和鼻腔至食道和气管(食道和气管交界)的圆锥形通道,是消化道和呼吸道的交会处。咽头与喉头在解剖学上合称为咽喉。人类
  • 经尿道前列腺切除术经尿道前列腺切除术英文为Transurethral resection of the prostate,简称TURP。这是一种泌尿外科的手术,用来治疗良性前列腺增生症,而前列腺也称为摄护腺,是男性特有的器官。顾
  • 伯吉斯页岩伯吉斯页岩(Burgess Shale)又译博捷斯页岩,位于加拿大西北的英属哥伦比亚境内的落矶山脉。美国古生物学家查尔斯·都利特·沃尔科特(Charles Doolittle Walcott)于1909年首先发现
  • 兰陵县兰陵县是中国山东省临沂市所辖的一个县。总面积为1899.86平方千米,2001年人口为117万。战国时楚国始置兰陵县,荀子曾任县令,今兰陵县部分属之。汉朝时,为东海郡襄贲县、兰陵县辖
  • 南乐县南乐县是河南省濮阳市下辖的一个县,面积623平方千米,人口47万。邮政编码457400。与山东省莘县、河北省魏县、大名县毗邻。1949年平原省成立,南乐县属平原省濮阳专区。1952年平
  • 马恩岛镑马恩岛镑(马恩语:)是马恩岛的流通货币。由马恩岛当地政府发行。辅币单位便士,1镑=100便士。其币值与英镑维持1:1的汇率,并且可在英国境内使用,但不在国际货币市场通行。根据ISO 421
  • 锡化镁锡化镁是一种二元金属间化合物,化学式为Mg2Sn。锡化镁可由相应化学计量比的单质共熔得到:锡化镁是浅蓝色的晶体,属立方晶系,空间群Fm3m,晶胞参数 = 0.67594 nm, Z = 4,具有CaF2结