首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

solidity 智能合约之间的调用

智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用。本篇文章带大家通过具体示例来了解一下智能合约之间的调用。...在智能合约的编译过程中,有两种情况:调用者和被调用者在一个sol文件中和分别在不同的文件中。...同sol文件的智能合约调用 在下面的智能合约中,Demo1和Demo在同一个文件中,可进行同时编译,然后逐个发布。...传递的第一个参数为Demo1的智能合约地址,第二个参数为要设置的值。 不同sol文件的智能合约调用 在大多数情况下,两个智能合约不存在于同一个sol文件中,那么就需要使用另外一种形式来进行调用。...原文链接:https://www.choupangxia.com/2019/07/30/solidity-智能合约之间的调用/

2.7K20

隐秘的交易:暗藏危机的智能合约恶意调用

,在solidity语言我们可以通过call方法来实现对某个合约或者本地合约的某个方法进行调用,调用的方式大致如下: .call(方法选择器, arg1, arg2, …) .call(bytes) 在使用call调用时我们可以通过传递参数的方式,将方法选择器、参数进行传递,也可以直接传入一个字节数组,在这里我们可以将要调用的合约方法以及相关参数转换为bytecode之后作为...extraData参数传入,之后通过spender.call(extraData)实现对合约中的任意方法的调用,而此时的spender也是可控的,所以也可以在存在漏洞的合约中调用任意合约的任意方法并为其提供相关的方法参数...漏洞演示 下面我们来做一个漏洞演示,模拟如何通过evilReflex漏洞窃取合约自身的token到任意地址,下面是存在漏洞的合约代码: pragma solidity ^0.4.26; contract...安全建议 造成evilReflex漏洞的根本原因还是在于call注入,在合约开发过程中应尽量避免call调用中方法选择器可控以及相关参数的可控性或者直接指定方法选择器来规避类evilReflex安全问题的发生

95520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在没有abi文件的情况下调用智能合约方法,web3py实现

    问题在:如何用 web3py 调用闭源合约[2] 问题中提到的交易记录在Binance Transaction Hash (Txhash) Details[3] 首先查看交易记录,bscscan 不能解析出来函数名...确定函数调用签名 也就是 0xb45112b2 区块链中合约代码执行,需要指定某个合约地址的某个函数,其中这个执行的函数是使用 Keccak-256(SHA-3)编码后的散列,取散列的前四个字节作为函数签名...1,搜索网上的签名数据库:https://www.4byte.directory/signatures/ 搜索结果如下: 说明还没有上传函数的 abi 定义 2,没有函数的 abi 信息,就没办法调用了吗...function greet3(uint256 num) public view returns (string memory) { return "greet3"; } 用你的合约生成调用接口...', abi=jsobjs['abi'] ) 再就是调用方法 搞定问题 1,查看 webpy 的代码,显然这样的调用是不支持的。

    2.4K30

    区块链DAPP开发实战——在安卓下调用本地节点发行的代币和智能合约

    >>>> 2、目的 通过本文的学习,你将收获以下几点: 区块链常用开发环境部署与搭建 基于truffle框架开发与部署Solidity智能合约 在安卓中通过web3j来访问本地节点部署的代币与合约...) >>>> 3、Charles Charles是一款抓包工具,我们需要用他来配置代理,以便手机/模拟器来访问到本地https://127.0.0.1:9545端口。...>>>> 4、Web3j.bat Web3j.bai智能合约包装器,可以把已编译好的智能合约文件.json转化成.java类文件,方便程序识别调用(https://github.com/web3j/web3j...到此我们的代币和智能合约已经编译并部署成功了。...这里web3j有一个相比web3.js不太方便的地方,不支持直接由合约地址来创建合约,所以我们只能通过他所提供的智能合约包装器(其实就是转换成java类),因为在java中合约需要一个明确的类型和内部声明

    1.3K11

    深聊 Solidity 的测试场景、方法和实践,太详细了,必须收藏!

    需要模拟合约依赖性的情况除外。 第9行和第11行,分别调用了set和get。为符合可重复性原则,该测试案例必须设计成幂等,即在任意的软硬件环境下,测试案例预期结果都是一致的。...智能合约测试重要目的之一是检测合约代码正确性,在预定输入值前提下,检查输出值是否符合预期。 上文我们介绍了控制台、WeBASE-Front和SDK三种测试环境。...在一些逻辑复杂的智能合约中,测试难点之一在于构造测试案例。在这种场景下,使用智能合约可以更好地模拟和构造测试数据,直接使用Solidity编写智能合约更为原生、友好。...除了正常流程外,还需要模拟和测试在各种异常环境,甚至是极端环境下,智能合约运作是否正常,能否达到预期的处理结果。 围绕智能合约不变的业务逻辑,忽略变化值,进行对应测试。...问题场景: 还是上述的HelloWorld合约,现在我们无法在set函数执行时获取原有的name值,只能通过name()函数来查询。有没有办法在set函数执行时,记录和打印出name原来的值呢?

    1.3K11

    第四课 以太坊开发框架Truffle从入门到实战

    return _value; } } 合约ExampleContract有个方法foo被部署在EVM的一个结点上运行了,此时用户如果想在DApp上调用合约内部的这个foo方法,如何操作呢,有两种办法...总结一下event,就是如果你的Dapp客户端web3.js想调用智能合约内部的函数,则使用event作为桥梁,它能方便执行异步调用同时又节约gas消耗。...然后import了待测智能合约。 建立单元测试智能合约,根据合约不同方法定义对应的test测试方法。 方法体内部去调用待测智能合约的方法,传参接收返回值,然后使用关键字assert判断是否符合预期。...这是官方文档,详细说明如何使用Solidity来编写智能合约的单元测试。 2.3 编译合约 键入 truffle compile 输出情况: ? 输出结果 根据编译输出的路径地址....部署智能合约的输出结果 查看testrpc的输出窗口,可以看到这笔交易和花费的区块: ?

    1.3K30

    Foundry 简介

    此外,Foundry的测试框架非常强大,可以进行单元测试、集成测试以及模拟交易,确保智能合约在不同场景下的安全性和稳定性。...强大的本地模拟环境(Anvil):Foundry提供的Anvil工具是一个轻量级的本地模拟环境,能够模拟EVM(以太坊虚拟机)链的行为。...Anvil与Ganache类似,但性能更优,支持更高效的事务和状态回滚机制。开发者可以在本地环境中模拟部署和调用智能合约,从而加速开发和调试过程。...运行测试在Foundry中运行测试非常简单,只需使用以下命令:$ forge testFoundry会自动编译合约并运行测试,结果会以清晰的格式输出。6....无论是开发新合约、进行单元测试还是模拟交易,Foundry都提供了一套非常完整且高效的解决方案。

    8310

    维基链智能合约APIbug定位修复

    图片5.png 图片4.png 图片2.png 一、关于维基链WICC 1、自行查看相关资料 (1)官方网站 (2)Github (2)开发者中心 二、维基链提供智能合约Dapp开发 从源码可知WICC...底层基于bitcoin,上层是运行Lua虚拟机,智能合约跟以太坊、EOS类似,特殊是由Lua开发 三、开发过程遇到的问题 1、由开发者接口文档可知其智能合约API是由底层mylib库提供合约与链数据的交互...2、mylib库GetTxConfirmHeight接口函数调用失败 (1)GetTxConfirmHeight接口说明 (2)由文档可知其功能是通过hash查询其上链时的区块高度 以某合约交易hash...,即取不到hash被确认的高度 图片3.png (4)查看底层接口代码 c++功底还不够深,看不出啥问题 4.png (5)换个思路:有没有其他入参也是hash的接口调用是正常的?...所以如果只修改本地节点,调用修复后的接口后,区块同步会停止 原因未找到,有进展后续会更新…

    50740

    智能合约安全——随机数

    本次我们将带大家了解智能合约中一个经常被用到的东西——随机数。智能合约的开发中常常会用到随机数,例如 Lottery 和现在流行的 NFT 数字藏品的属性等都需要用到随机数。...接下来我们来看合约代码,这个合约是一个猜数字赢以太的游戏,我们可以看到,部署者使用上个区块的区块哈希和区块时间作为随机数种子生成随机数,我们只需要模拟他的随机数生成方法就可以得到奖励。...下面我们来看攻击合约:攻击合约图片下面我们先来分析攻击流程:攻击者调用Attack.attack()函数,它模拟了 GuessTheRandomNumber 合约中随机数的生成方式生成随机数后调用 guessTheRandomNumber.guess...所以最优的解决办法还是接入知名预言机来获取随机数。...如果想了解更多的智能合约和区块链知识,欢迎到区块链交流社区CHAINPIP社区,一起交流学习~社区地址:https://www.chainpip.com/

    67230

    fabric区块链(六)—解析basic智能合约(go)

    ---title: fabric区块链(六)—解析basic智能合约(go)date: 2023/5/21 10:28tags: fabric区块链categories: 区块链---解析basic智能合约...(go):图片basic合约是我们之前在调用示例合约的时候调用的合约,之前分析过java语言编写的,再分析一下go语言编写的。...├── chaincode (包含与区块链智能合约相关的文件。)│ ├── mocks (包含一些用于测试目的的模拟文件或桩文件。)...│ ├── smartcontract.go (区块链智能合约的实现文件。)│ └── smartcontract_test.go (用于测试区块链智能合约的测试文件。)...它使用了Hyperledger Fabric提供的链码API和自定义的智能合约实现。如果创建或启动过程中出现错误,程序将输出相应的错误日志并终止运行。

    58810

    为什么很多“智能合约”的使用场景是不能实现的?

    也许是这个外部源对于不同节点的请求返回了不同的结果,或者只是暂时的服务不可用,任何一个原因,只要共识被打破,这整个区块链就死了。 有没有变通的方案呢?有而且也很简单。...换言之就是由一个信任的第三方(也可以是链中节点)主动把信息推给区块链而不是智能合约去把数据拉进来。 当谈到智能合约也能对区块链的外部世界输出事件的时候,也有一个类似的问题。...比如很多人想到用智能合约来调用银行的外部接口用来转账。但是如果每个节点都要独立的执行这个职能合约,那么究竟哪个节点来负责调用银行接口呢?...另一方面,节点那么多,银行的接口需要调用那么多次吗?更糟糕的是,如果智能合约需要知道银行的接口调用是否成功,我们又回到了依赖外部信息的那个问题。...和之前一样,我们也有一个变通方案,我们不需要智能合约调用银行接口,而是用一个可信任的服务监控区块链的状态然后根据链的状态做相应的动作。

    67420

    要成为年薪百万的技术大牛必经历这5个阶段, 收好这份超实用的技术进阶指南 | 技术头条

    同理,你也不能再两台不同的服务器上运行两种不同的智能合约。 决绝这一问题的唯一办法就是隔离性。也就是说,将智能合约和交易完全隔离开来。这样,有些编程语言就可以满足这些要求了。...因此,作为一种契约,智能合约需要具备以下三种特性: 确定性 可终止性 独立性 特性1:确定性 如果一个程序每次都给与给定输入相同的输出,那么这个程序就是确定性的。...这显然也是智能合约的一大问题,因为根据智能合约的定义,合约必须要在给定的时间内终止运行。...但是,我们不知道是不是有人恶意上传包含错误或病毒的合约,如果智能合约不是相互独立的,一旦有人上传有病毒的智能合约,就会波及整个系统,因此,智能合约的相互独立性至关重要。...现在,我们已经完全了解智能合约的三大特性,那么智能合约应该如何执行呢?

    50730

    fabric区块链(六)—解析basic智能合约(go)

    解析basic智能合约(go): basic合约是我们之前在调用示例合约的时候调用的合约,之前分析过java语言编写的,再分析一下go语言编写的。...├── chaincode (包含与区块链智能合约相关的文件。) │ ├── mocks (包含一些用于测试目的的模拟文件或桩文件。)...│ ├── smartcontract.go (区块链智能合约的实现文件。) │ └── smartcontract_test.go (用于测试区块链智能合约的测试文件。)...它使用chaincode.SmartContract{}作为智能合约的实现。 if err != nil { ... }: 这是一个错误处理的条件语句,用于检查链码实例的创建过程中是否发生了错误。...它使用了Hyperledger Fabric提供的链码API和自定义的智能合约实现。如果创建或启动过程中出现错误,程序将输出相应的错误日志并终止运行。

    79930

    公链开发:十分钟讲清楚区块链侧链技术

    处理这些问题的办法之一是从头开发新的区块链,但这种办法会形成许多的重复性作业,并且需求不断地发行新的数字财物。 那么,有没有在不影响区块链原作的情况下,在区块链原作的根底上进行技能晋级的处理方案呢?...经过侧链,能够在主链的根底上添加买卖隐私维护技能、智能合约等新功用,让用户在不影响现有主链作业的情况下,访问许多新服务。 此外,侧链还供给了一种更安全的协议晋级办法。...这样做会确定主链中的数字财物,输出仍会确定在可能的竞赛期内,以承认相应的买卖已经完结。然后,将创立一个SPV证书并发送给侧链。...BTC中继是ConsenSys推出的根据以太坊区块链的智能合约侧链处理方案。 BTC中继以安全和去中心化的办法衔接以太坊网络和比特币网络。...BTC中继答运用户经过运用以太坊的智能合约功用来验证以太坊区块链上的比特币买卖。 以太坊DApp开发者能够从智能合约向BTC中继发出API调用,以验证比特币网络活动。

    88110

    开发基于以太坊智能合约的DApp

    编写好的智能合约的Project1.sol文件放到contracts目录下 7、编译和部署智能合约 在migrations目录下创建文件2_deploy_contracts.js: var Project1...,现在你的以太坊智能合约应该已经部署到你用来测试的ganache中去了。...,实际上就是为你的智能合约创建一个对应的js对象,方便后续调用 */ //通常的做法是使用你的智能合约编译之后生成的abi的json文件,该文件在用truffle compile之后,生成在build...btn-adopt’, App.handlePlot); }, refreshPlots: function(plots, account) { /* * 这个函数就是上面initContract中调用的用智能合约更新页面...){ divisionInstance = instance; //调用智能合约的buyPlot函数,该函数需要2个参数,

    1.2K20

    第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约

    客户端可以通过Web3.js API调用智能合约,而智能合约本身又可以直接访问以太坊网络,也就是说,智能合约前面连接着客户端,后面连接着以太坊网络,起到了承前启后的作用,而且通过智能合约,可以让整个以太坊网络更灵活...因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行。...在正常情况下,应该将智能合约部署在以太坊网络上,然后通过以太坊客户端调用,不过现在还没有讲如何将智能合约部署到以太坊网络上,以及如何调用智能合约。所以目前只能使用最简单的方式测试智能合约。...代码区域,位于Remix页面的中上部,用于编写智能合约代码。 日志区域,位于Remix页面的中下部,运行智能合约后,会将日志信息输出到这一区域。...通过本节的若干步骤,终于成功运行了Calc智能合约的add函数,并获得了add函数的返回值(本例是7),不过这个智能合约程序并没有部署在以太坊网络上,而是在本地运行的,也就是说,本节其实是通过模拟的方式运行了本地合约

    1.3K10

    Ethereum 01 - 保证智能合约的安全可靠

    当一个普通的用户账户调用执行退款时, 另一个智能合约同时来调用, 就会有严重的隐患. 由于Gas的限制的限制, 我们不需要担心死循环的问题....此外, 在使用多重组合的合约时, 被调用的合约也可能修改调用合约所依赖的另一个合约的状态. Gas限制和循环 在以太坊智能合约中, 每一步操作是要求用户以Gas的形式付出相应的代价....比如智能合约A调用了智能合约B, 有一个用户P给智能合约A发Transaction, 调用A调用了B....也可以用下面的工具进行检查: Oyente: 一个Python语言编写的工具, 判断代码中有没有常见的安全漏洞, 也会提示出可能有安全隐患的地方....Solgraph: 一个Node.js工具, 可以将一个智能合约作为输入, 输出一个DOT图文件, 能将智能合约的功能控制流程画成一个流程图, 也可以标注出潜在的安全漏洞.

    31210

    第九课 如何在Remix环境下进行Solidity代码单步调试

    ,开始点击Create按钮执行智能合约: ?...智能合约创建 设置´value´的值为10,单位选择ether,点击Donate 表示从当前账号捐赠10个ETH给该智能合约。 ? 交易转移 Remix显示交易相关的一些信息。...• Call Stack 调用堆栈 • Return Value 返回值,只有当运行到RETURN原语才显示 • Full Storages Changes 全存储改变,只有在执行末尾才显示所有改变的合约变化存储...warning 按钮将在异常发生前跳转到最后的执行原语。 需要说明的是,智能合约交易的执行是事件级别的,就是无法如C++一样在运行中改变变量值,只能一次执行完毕。..."0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",500000000000000 合约交易执行成功后,点击终端输出器中的Debug按钮,点击调试面板的“Jump

    3.1K30

    区块链技术与应用06 北大肖臻

    这里的三个成员函数都没有参数,但是有的成员函数是可以有参数的。 image.png 外部账户如何调用智能合约?...这个问题不是NPC问题,NPC是可解的,只是没有多项式时间内的解法,不考虑复杂度的话是可解的。 发起一个智能合约的调用,要花费汽油费。...当一个全节点收到一个智能合约的调用的时候,先按照合约中给出的 GasLimit 算出可能花掉的最大汽油费。...发生错误,已经花掉的汽油费是不退的。 image.png 嵌套调用。连锁式回滚?不一定,取决于调用智能合约的方式。直接调用,会连锁式回滚。如果call ,则不会。...智能合约能够得到的区块信息。 image.png 智能合约能够得到的调用信息。 image.png 对 函数,msg.sender是C1,但是tx.origin是A。

    77730

    Windows环境下跑通Truffle开发环境

    最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在steemit上不断地记录我的成长过程。...通过Solidity编译器,可以把高级语言编译成跑在以太坊虚拟机(EVM)上的低级语言,可以极大地减轻智能合约编程的工作量。...而TestRPC就是一个在本地使用内存模拟的一个以太坊环境,还提供丰富的命令行,可以查询以太坊的状态。...5、web3.js web3.js是以太坊提供的一个javascript库,提供了一系列与区块链交互的Javascript对象和函数,可以调用智能合约、查看网络状态、本地账户、交易信息、区块信息等等,写前端程序或测试用例也要用到它...在运行truffle develop命令时,可能会遇到命令无法执行的问题,这是truffle.js的名字冲突造成的,可用以下的一种办法解决: 每次调用truffle的时候,用truffle.cmd 从PATHEXT

    3.2K70
    领券