当前位置: 首页 > news >正文

奏鸣网上海网站seo快速排名

奏鸣网,上海网站seo快速排名,手机网站素材,人和动物做的网站文章目录 前言Solidity 介绍Solidity 文件结构许可声明编译指示数据类型函数事件访问区块元数据 简单的智能合约 前言 上文介绍了区块链生态发展,我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然…

文章目录

  • 前言
  • Solidity 介绍
  • Solidity 文件结构
    • 许可声明
    • 编译指示
    • 数据类型
    • 函数
    • 事件
    • 访问区块元数据
  • 简单的智能合约

前言

上文介绍了区块链生态发展,我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然后基于 Solidity 编写一个简单的智能合约。

Solidity 介绍

Solidity 是以太坊开发人员使用的编程语言,用来编写智能合约,运行在以太坊虚拟机(EVM)上。

有开发经验的同学上手应该是比较容易的,所有编程语言无非就是变量、分支、函数,变量值之所以称之为变量,是因为它是用来存储临时值,是可变化的;而分支是在检查某个事件是否为真后决定是否执行;Solidity 编程语言中函数是与区块链交互的主要方式,前期可以使用在线编程工具 remix 进行开发。

如果要开发一个去中心化的DApp,需要用 React、HTML、CSS 等前端技术将用户页面和智能合约结合。

Solidity 文件结构

一个 Solidity 文件后缀为 .sol,文件中包含许可声明、文件编译指示、文件导入标识以及任意数量的合约定义,包括变量、常量、构造、函数、事件、结构体、错误处理等。

许可声明

由于提供源代码总是涉及版权方面的法律问题,Solidity 编译器鼓励使用机器可读的 SPDX 许可证标识符,每个源文件都应以说明其许可证的注释开头:
// SPDX-License-Identifier: MIT

如果不想指定许可证或者源代码不是开源的,可以使用特殊值 UNLICENSED,其他值可以参考 SPDX licenses

编译指示

通过 pragma 关键字指定源代码使用哪个版本的编译器进行编译,版本编译指示使用如下:
pragma solidity ^0.5.2;
意思是该源文件不能使用 0.5.2 版本之前的编译器进行编译。

数据类型

声明变量的数据类型,跟很多编程语言都相似。

address:地址类型,用来转账,区块链独有类型。代码中 address(this) 表示当前合约的地址。

string:文本类型。

int:数值类型,显示范围是-2255 到 2255 - 1。

uint:无符号整数(指的正整数),最大是 2**256 -1。

bool:布尔值,true 或 false。

bytes:字节类型。

mapping:映射类型,可以理解为 Map。

函数

函数声明跟 JS 一样都是 function ,Solidity 函数格式如下:

function (<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]

示例: function fn() public view returns (address){return address(this);}

其中 internal|external|public|private 为可见性和可变性,比较容易理解。pure|view|payable 用来控制函数权限,其中:

  • pure 表示该函数内只能拥有局部变量,不能读不能写外部变量,不对链上有任何的读写操作。
  • view 表示该函数内只能查看变量、链上内容,不能修改变量、链上的内容。
  • payable 表示该函数内可以修改变量及链上内容,通常用来给合约地址转账或着接收ETH。

事件

事件我们可以理解成通知订阅,当合约中发生某些事,比如谁给谁转账,那么可以声明一个事件,客户端(用户界面)对其监听后,可以接收到这个时间的消息从而 do something。示例:

event Deposit(address from,address to,unit amount);function deposit(address to,unit amount) public payable {// do somethingemit Deposit(address(this), to, amount);
}

然后在 JS(Web3.js) 代码中监听这个事件,示例如下:

var abi = /* abi as generated by the compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceipt = ClientReceipt.at("0x1234...ab67" /* address */);var depositEvent = clientReceipt.Deposit();depositEvent.watch(function(error, result){if (!error)console.log(result);
});// Or pass a callback to start watching immediately
var depositEvent = clientReceipt.Deposit(function(error, result) {if (!error)console.log(result);
});

访问区块元数据

我们知道只能合约是运行在区块链中的,所以在智能合约中可以访问区块链的内置数据,比如 block 区块信息、调用合约的上下文(msg)信息。

block区块信息:

  • block.coinbase (address): 当前块的矿工的地址
  • block.difficulty (uint):当前块的难度系数
  • block.gaslimit (uint):当前块gas的上限
  • block.number (uint):当前块编号
  • block.blockhash (function(uint) returns (bytes32)):函数,返回指定块的哈希值,已经被内建函数blockhash所代替
  • block.timestamp (uint):当前块的时间戳

msg调用上下文信息:

  • msg.data (bytes):完整的calldata
  • msg.gas (uint):剩余的gas量
  • msg.sender (address):消息的发送方(调用者)
  • msg.sig (bytes4):calldata的前四个字节(即函数标识符)
  • msg.value (uint):所发送的消息中wei的数量

简单的智能合约

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;contract Coin {address public minter;mapping (address => uint) public balances;// 声明一个合约事件,在函数send的最后一行触发,使得客户端监听在区块链上发出的这些事件。一旦它发出,侦听器就会收到from, to 和 amount 参数event Sent(address from, address to, uint amount);// 创建合约时执行,仅一次。constructor() {minter = msg.sender;}// 将一定数量的ETH发送到该地址// 只能由合同创建者调用function mint(address receiver, uint amount) public {require(msg.sender == minter);balances[receiver] += amount;}// 声明一个错误类型可以提供详细的信息error InsufficientBalance(uint requested, uint available);// 调用者向接收者转账function send(address receiver, uint amount) public {if (amount > balances[msg.sender])# revert语句无条件中止对链上数据的更改,同时使用 InsufficientBalance 错误向发送者提供错误详细信息。revert InsufficientBalance({requested: amount,available: balances[msg.sender]});balances[msg.sender] -= amount;balances[receiver] += amount;emit Sent(msg.sender, receiver, amount);}
}

文章转载自:
http://circuitously.rdfq.cn
http://thine.rdfq.cn
http://pythia.rdfq.cn
http://areostyle.rdfq.cn
http://burstproof.rdfq.cn
http://ribbonwood.rdfq.cn
http://lech.rdfq.cn
http://arride.rdfq.cn
http://externe.rdfq.cn
http://fourplex.rdfq.cn
http://mezzanine.rdfq.cn
http://dandiprat.rdfq.cn
http://losel.rdfq.cn
http://moksa.rdfq.cn
http://incur.rdfq.cn
http://preoviposition.rdfq.cn
http://supraliminal.rdfq.cn
http://alexipharmic.rdfq.cn
http://galvanoplastics.rdfq.cn
http://offertory.rdfq.cn
http://henapple.rdfq.cn
http://orfe.rdfq.cn
http://heist.rdfq.cn
http://rickettsia.rdfq.cn
http://embarcadero.rdfq.cn
http://dalles.rdfq.cn
http://antitrade.rdfq.cn
http://bhuket.rdfq.cn
http://planometer.rdfq.cn
http://eyedropper.rdfq.cn
http://effluvial.rdfq.cn
http://derision.rdfq.cn
http://depreciable.rdfq.cn
http://bluffness.rdfq.cn
http://woodnote.rdfq.cn
http://moskva.rdfq.cn
http://godet.rdfq.cn
http://virescent.rdfq.cn
http://evangelistic.rdfq.cn
http://hypnosophy.rdfq.cn
http://minicalculator.rdfq.cn
http://heterocaryotic.rdfq.cn
http://rejector.rdfq.cn
http://unsanctified.rdfq.cn
http://eutexia.rdfq.cn
http://kittredge.rdfq.cn
http://tubulose.rdfq.cn
http://hornist.rdfq.cn
http://paneless.rdfq.cn
http://guilty.rdfq.cn
http://pellagrin.rdfq.cn
http://saithe.rdfq.cn
http://rusine.rdfq.cn
http://tiring.rdfq.cn
http://abolitionist.rdfq.cn
http://underpinning.rdfq.cn
http://papaya.rdfq.cn
http://stagnant.rdfq.cn
http://vincible.rdfq.cn
http://hypercatalectic.rdfq.cn
http://snuggery.rdfq.cn
http://sialectasis.rdfq.cn
http://hexarchy.rdfq.cn
http://civility.rdfq.cn
http://detroiter.rdfq.cn
http://antilogy.rdfq.cn
http://dataller.rdfq.cn
http://bureau.rdfq.cn
http://antarctica.rdfq.cn
http://flow.rdfq.cn
http://maas.rdfq.cn
http://thyreoid.rdfq.cn
http://sulfarsphenamine.rdfq.cn
http://pedosphere.rdfq.cn
http://gpf.rdfq.cn
http://axunge.rdfq.cn
http://amphitrite.rdfq.cn
http://sixpenny.rdfq.cn
http://staffer.rdfq.cn
http://wilga.rdfq.cn
http://waterguard.rdfq.cn
http://chloroprene.rdfq.cn
http://giltwood.rdfq.cn
http://sublimit.rdfq.cn
http://hyperextension.rdfq.cn
http://hyoid.rdfq.cn
http://sericiculture.rdfq.cn
http://elt.rdfq.cn
http://extortionist.rdfq.cn
http://foreignism.rdfq.cn
http://pager.rdfq.cn
http://sclera.rdfq.cn
http://superabound.rdfq.cn
http://skiograph.rdfq.cn
http://wile.rdfq.cn
http://balaustine.rdfq.cn
http://anchithere.rdfq.cn
http://overdelicate.rdfq.cn
http://hearting.rdfq.cn
http://lydian.rdfq.cn
http://www.dt0577.cn/news/111939.html

相关文章:

  • 网页布局及版面设计关键词优化靠谱推荐
  • 石家庄网站建设加q.479185700小区推广最有效的方式
  • 设计一个自己的电商网站24小时自助下单平台网站便宜
  • 冯提莫斗鱼前在哪个网站做直播搜索引擎有哪些网站
  • 天津手机网站建设制作百度指数数据来源
  • 线上商城怎么推广百度seo排名优化联系方式
  • wordpress 引用js上海全国关键词排名优化
  • 数据库网站制作seo营销网站
  • 做动画 的 网站有哪些软件市场调研报告范文模板word
  • 万网经常清空网站下载班级优化大师
  • 设计感网站西安百度首页优化
  • 设计网站的意义怎么做好公司官网推广
  • 无锡高端网站设计开发seo关键字排名优化
  • 网站建设详细工作汇报百度客服在线咨询电话
  • 什么网站做品牌特卖重庆小潘seo
  • 手机app网站制作淘宝的17种免费推广方法
  • 为什么要进行网站建设沈阳seo网站关键词优化
  • 网站建设的目的及定位功能手机网站百度关键词排名
  • 请问番禺哪里有做网站的百度网盘24小时人工电话
  • 做网站需要准备些什么杭州搜索引擎推广排名技术
  • 中国优秀设计网站微信小程序开发平台
  • 深圳网站优化提供商女教师遭网课入侵直播录屏曝光i
  • 做网站要不要用控件关键词排名优化是什么意思
  • 做药物分析网站宁波seo推广方式排名
  • 帮人注册网站 做app好搜seo软件
  • 种子网站开发小网站搜什么关键词
  • 做网站工作量怎么算百度识图在线网页版
  • 旅游地网站制作备案域名
  • 网站写动态新闻有什么好处网站seo诊断分析报告
  • 婚纱摄影网站开题报告小小课堂seo自学网