智能合约简单介绍

article/2025/9/12 22:30:21

本学期学习了区块链的课程,作业是对于智能合约学习后的报告:

 

1 智能合约简单了解

1.1智能合约是什么

智能合约是由事件驱动的、具有状态的、部署于可共享的分布式数据库上的计算机程序,多用IF-THEN语句。狭义来说,智能合约是设计相关商业逻辑和算法的程序代码,把人、法律和网络的复杂关系代码化;广义来说,智能合约是一种可以实现自我执行和自我验证的计算机协议。乍一看,与数据库中的触发器颇为相似。

简言之,智能合约是一种用计算机语言取代法律语言去记录条款的合约。智能合约可以由一个计算系统自动执行,它可以算是传统合约的数字化版本。

如果把区块链比作一个数据库的话,智能合约就是能够使区块链技术应用到现实生活的应用层。智能合约是在区块链数据库上运行的计算机程序,可以在满足其源代码中写入的条件时自动执行。智能合约编写完毕就可以被用户信赖,合约条款不能更改,因此合约也是不可更改的。

1.2智能合约的技术特点

1.2.1数据透明化

区块链上所有的数据都是公开透明的,因此智能合约的数据处理也是公开透明的,运行时任何一方都可以查看其代码和数据。

1.2.2不可篡改

区块链本身的所有数据不可篡改,因此部署在区块链上的智能合约代码以及运行产生的数据输出也是不可篡改的,运行智能合约的节点不必担心其他节点恶意修改代码与数据。

1.2.3永久运行

支撑区块链网络的节点往往达到数百甚至上千,部分节点的失效并不会导致智能合约的停止,其可靠性理论上接近于永久运行,这样就保证了智能合约能像纸质合同一样每时每刻都有效。

 

2 Solidity语言初步学习

2.1 IDE的使用

在学习过程中使用了在线IDE在本机上该ide截图如下左侧即为文件的列表中间的区域可以快捷新建文件

 

2.第一个智能合约helloworld

2.2.创建项目

新建一个名为Helloworld.sol的文件源码如下相关函数的作用写在了注释里

pragma solidity ^0.4;//版本指令为0.4
contract HelloWorld {//合约创建
function sayHelloWorld() public returns(string){//定义函数,public意味着任何一方 (或其它合约) 都可以调用你合约里的函数。
return ("hello world");
}
}

2.2.2编译运行

在compile选项卡中进行编译,可以点击compilation Details来对编译的具体细节进行了解。这边没有报错,且出现绿色钩子图形表示编译成功。

 在编译成功后,我们就能在run 选项卡中部署该合约

 点击deploy就是部署这个合约,下面就会出现这个合约的函数,点击运行这个合约的函数,日志会输出相应的记录,可见返回了helloworld。

 

 

2.第二个智能合约

对一个简单银行模型的合约进行了学习和编译,对于该模型的理解均以注释的形式写在代码中,通过该合约可以实现存钱,取钱,查看余额的功能:

2.3.1 初始化部分

这边创建了一个银行的简单模型,声明了一个mapping变量来表示余额,进行了一些值和变量的初始化。

2.3.2构造方法

  

2.3.3存钱的方法

2.3.4取钱的方法

2.3.5查看余额的方法

2.3.6对合约进行运行

同helloworld合约一样,编译成功后点击deploy,这边出现了四个方法可以进行选择。

 

我们点击balance和owner分别实现了显示了用户信息和余额的功能,deposit函数也能成功运行,但是withdraw方法却进行了报错,因为这个账户的余额是0,在代码中我们用require函数进行了限制。如果取钱额大于账户余额就会报错,不能实现取款,所以报错。

2.3.7其他

因为这里实现了货币交易,所以会出现收取手续费的提示。gas就是虚拟货币里的手续费的概念,gas越多,交易会越快。

 

 2.3.8 源代码:

pragma solidity 0.6.6;contract SimpleBank { //创建一个简单银行模型的合约mapping (address => uint) private balances;//声明了一个mapping类型的变量balance表示余额,这是一个key-value类型,key是address类型,value是uint类型。
//owner用来表示合约持有者的地址。address public owner;//address是一种比较特殊的类型,它有20个字节长度,一般用来表示地址或者账户的公钥信息。需要注意的是,虽然看起来它是一个数字的类型,但是它不支持任何的算术运算操作。event LogDepositMade(address accountAddress, uint amount);//事件 是合约和区块链通讯的一种机制。你的前端应用“监听”某些事件,并做出反应,通过emit触发事件的执行。constructor() public {//构造方法owner = msg.sender;//把owner变量赋值为msg.sender,后者是一个约定的内部变量,表示的是方法的调用者。在这里指合约的创建人。}function deposit() public payable returns (uint) {//deposit表示存钱的方法。被payable关键字修饰的方法可以在调用的时候接收ETH(以太币)。//这个方法的首先检查发送的ETH值要必须大于0,然后更新余额,出发日志事件,最后返回余额。require((balances[msg.sender] + msg.value) >= balances[msg.sender]);//require使得函数在执行过程中,当不满足某些条件时抛出错误,并停止执行。这边通过该函数判定存入的钱大于0.balances[msg.sender] += msg.value;//余额增加emit LogDepositMade(msg.sender, msg.value); // 对应上方的event,触发该监听return balances[msg.sender];//更新余额}function withdraw(uint withdrawAmount) public returns (uint remainingBal) {//表示取钱的方法。require(withdrawAmount <= balances[msg.sender]);//判定取出的钱小于账户余额。balances[msg.sender] -= withdrawAmount;//取钱msg.sender.transfer(withdrawAmount);//转账一定数量(以wei为单位)的以太币到指定的地址,该地址为调用该函数的人的地址return balances[msg.sender];}function balance() view public returns (uint) {//返回余额的方法。view表示是一个只读的方法,不消耗gas费。return balances[msg.sender];}
}


http://chatgpt.dhexx.cn/article/r8l8UyqV.shtml

相关文章

智能合约

智能合约&#xff08;英语&#xff1a;Smart contract &#xff09;是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。[1]智能合约概念于1994年由Nick Szabo首次提出。智能合同的目的是提供…

[EOS源码分析]6.EOS特殊智能合约eosio

这里说的eosio智能合约不是泛指eos的智能合约&#xff0c;它是一个特殊的具体的合约。它本事可大了&#xff0c;我们一起来看看它有哪些功能 负责智能合约部署 大家有注意到如下红色字体的log吗 $ cleos set contract hello.code ../eos-contract/hello -p hello.code Publish…

EOS智能合约开发(一)

一、 智能合约功能二、 通讯模式 2.1 运行机制2.2 内联通信2.3 延迟通信2.4 交易和动作2.5 交易确认2.6 动作处理程序和动作的apply上下文2.7 交易限制 三、文件结构 3.1 创建框架3.2 apply处理程序3.3 EOSIO_ABI 宏 四、多索引数据库API 4.1 EOSIO多索引API4.2 EOSIO多索引迭代…

EOS系列 - WASM智能合约 - 特性

构造函数 addressbook(name receiver, name code, datastream<const char*> ds):contract(receiver, code, ds) {}#单例表&#xff08;code和scope都用receiver的表&#xff09;也可在初始化列表中实例化 singleton_example( name receiver, name code, datastream<c…

EOS智能合约开发(十五)EOS 状态机架构解析

好久没有写文章了&#xff0c;最近公司事情比较忙。非常感谢上次杭州团队一位负责EOS状态机的同事精彩分享。今天查阅很多资料后&#xff0c;整理这篇文章&#xff0c;希望对大家有所帮助。 EOS状态机是什么&#xff1f; 简单讲就是数据库&#xff0c;是EOS记录智能合约执行结…

接口测试时,输入所有参数的参数值后,接口返回“参数错误:所有参数都不能为空”

问题原因&#xff1a; 参数名称输入有误&#xff0c;前台&#xff08;pwd&#xff09;和后台&#xff08;password&#xff09;的参数名称不一致 &#xff0c;保持一致后即可

matlab 错误使用 connector.internal.autostart.run输入参数的数目不足。

matlab打开后提示&#xff1a; 错误使用 connector.internal.autostart.run输入参数的数目不足 原因&#xff1a;自己写的一个函数和matlab自带的函数重名了 参考&#xff1a;警告: 在 matlabrc 中初始化 Java 首选项失败 – MATLAB中文论坛MATLAB中文论坛MATLAB 基础讨论板块…

Matlab 自带遗传算法函数 ga() 运行报错:“ fitnessfcn() 输入参数的数目不足。”

原始程序 %主程序 m [1 2]; R [1.5 1]; epsilon [2^R(1)-1 2^R(2) - 1]; A [-1 epsilon(1); 0 -1]; b [0 0]; Aeq [1 1]; Beq 1;%matlab自带函数包 [x_optimal, fval] ga(fitnessfcn, 2, A, b, Aeq, Beq, [0;0], [1;1], []); ---------------------------------…

matlab函数参数不足,调用函数显示输入参数不足

问题描述.png (29.7 KB, 下载次数: 1) 2015-1-27 09:34 上传 %Gauss-Newton算法实现如下 function[x,minf] = GN(f,x0,var,eps)formatlong; ifnargin == 3 %如果没有设置eps,则eps=1.0e-6eps = 1.0e-6; end m = 0; S =transpose(f)*f; %trnspose是转…

matlab 函数不定参数,matlab function定义一个函数,但一直出来说输入参数数目不足。我用的是2014版本,不知道数目原因啊?...

www.mh456.com防采集。 h 5;g 1; % g取源0有问题% 被积函数2113可以化5261简成f 4102(a,b,r)(r*h-r^16532*cos(a-b))/(h^2r^2g^2-2*h*r*cos(a-b))^1.5;% 求积分quadv((r)quadv((b)quadv((a)f(a,b,r), 0, 2*pi), 0, 2*pi), 0, h) 错误在于&#xff0c;调用函数f( x )缺一个…

matlab plot输入参数太多,输入参数太多问题

版本&#xff1a;R2016a 利用SCE-UA调用新安江模型进行率定时&#xff0c;显示参数太多&#xff0c;求大神指导。 clear; clc; spathcd P0(textread([spath,\matlabxingshanjiangyu.txt])); PP0(2,:);%降水量(mm) EI0(textread([spath,\matlabxingshanzhengfa.txt])); EIEI0(2,…

参数输入太多

参数输入太多 在向platEMO平台添加新的算法时&#xff0c;可能会出现参数输入太多的错误提示 可能是由于输入的参数内包含逗号&#xff0c;比如 a[1,2],b[3,4] 从而造成”输入参数太多“的错误提示。

MATLAB S-function(教程分享) 报错 flag = 3(output), at time 0.0. 输入参数的数目不足。

前言 从上周开始用S-function做仿真&#xff0c;之前已经学过的&#xff0c;我觉得很好的教程网址是 【0基础直接带你上手matlab simulink仿真&#xff08;不是标题党&#xff0c;讲解超级细致用心&#xff09;&#xff08;非线性系统自适应控制器的搭建&#xff09;】 https…

matlab报错“输入参数的数目不足”

图片源自下方链接 原文链接MATLAB中出现参数数目不足的错误提示 - 爱上对方过后就哭了忆 - 博客园 (cnblogs.com)

错误使用 max 输入参数的数目不足。

相比大多数人熟悉的在调用自己编写的函数时出现的 “输入参数的数目不足” 问题&#xff0c;该情况下&#xff08;即在同一脚本或同一函数中&#xff09;也会出现matlab内部函数调用问题&#xff08;如max、min等&#xff09;&#xff0c;在编程时应注意此点&#xff01;

Matlab运行自定义函数显示“输入参数的数目不足”

问题描述 很多初学者在刚开始学习使用Matlab自定义函数时&#xff0c;可能遇到程序上没有问题&#xff0c;但一运行就显示输入参数的数目不足这个问题。 比如自定义一个函数&#xff1a;查找最小的m&#xff0c;使得m满足12…m > k&#xff08;k为任意一个整数&#xff09;…

浏览器播放视频倍速方法

1.右击播放页面 2.选择检查 4.选择console&#xff0c;如图&#xff1a; 5.在下面输入 &#xff1a;videojs.getPlayers("video-player").html5player.tech_.setPlaybackRate(1.5)&#xff0c;括号里的数字就是要加倍的倍速。

浏览器播放RTSP

浏览器播放RTSP 由于现在浏览器不直接支持RTSP&#xff0c;然后很多监控厂商如海康大华等又不提供RTMP的情况下&#xff0c;项目需要实现HTML中播放监控视频。之前做过转流的方案&#xff0c;在服务器中把RTSP转成RTMP&#xff0c;这种方案开发量大而且转码不稳定&#xff0c;…

0516---win10 chrome 浏览器播放视频没有声音的解决办法

win10 chrome 浏览器播放视频没有声音的解决办法 近期我的Win10 主机在使用 Chrome 浏览器播放搜狐视频的时候没有声音&#xff0c;而用 Edge浏览器播放同一视频就一切正常&#xff0c;初步判断是浏览器的设置引起的。通过以下操作步骤得以解决。 启动 chrome 浏览器&#xf…