Solidity

java通过web3j调用智能合约传递数组参数的坑

我的未来我决定 提交于 2020-12-11 17:47:37
最近在写solidity智能合约,用java与solidity交互过程中,需要传递数组参数到智能合约,但是用web3j转换后的数组参数去调用智能合约接口一直返回错误信息,在万能的互联网上翻阅了大量资料后,终于解决,在此记录一下: 首先java项目需要引入web3j的依赖包: <dependency> <groupId>org.web3j</groupId> <artifactId>core</artifactId> <version>4.5.18</version> <exclusions> <exclusion> <artifactId>okhttp</artifactId> <groupId>com.squareup.okhttp</groupId> </exclusion> </exclusions> </dependency> 合约demo代码如下: function arrTest(bytes32[] memory arr) public view returns(string memory) { return bytes32ToString(arr[0]); } function bytes32ToString(bytes32 bname) view public returns(string memory){ // 此处要加上memory // 先将有效字符计算出来

以太坊:在合约里调用指定地址的另一已部署合约

冷暖自知 提交于 2020-12-09 02:29:57
转载请注明出处: https://www.cnblogs.com/zhizaixingzou/p/10122371.html 目录 1. 在合约里调用指定地址的另一已部署合约 后面的讲解已在下面的在线 IDE 中验证过: https://remix.ethereum.org/#optimize=false&version=soljson-v0.4.25+commit.59dbf8f1.js 1.1. 第一个合约:供调用的合约 编写源码: 1 pragma solidity ^0.4.11 ; 2 3 contract DataStore { 4 uint256 data; 5 6 function set(uint256 x) public { 7 data = x; 8 } 9 10 function get() public view returns (uint256) { 11 return data; 12 } 13 } 编译得到字节码:

Solidity-让合约地址 接受ETH的转账充值的 三种方式

一笑奈何 提交于 2020-12-09 01:43:11
以太坊智能合约开发:让合约接受转账 在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢? 有三种方式: 部署合约时转账 调用合约提供的方法 直接向合约地址进行转账 但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢? 1、部署转账 在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加 payable 修饰符。 示例: contract Test { // 构造函数添加payable修饰符即可 function Test( ) payable { // 构造函数其他逻辑代码 } } 2、执行合约转账 执行合约转账,则需要给你需要支持转账功能的方法添加 payable 修饰符 示例: contract Test { function getBalance( ) payable { // 其他逻辑 } } 3、直接转账 支持直接转账,需要借助后备函数(fallback function),只需要为后备函数添加 payable 修饰符 示例: contract Test { function ( ) payable { // 其他逻辑 } } 来源: oschina 链接: https://my.oschina.net/u/4263469/blog/3617457

向合约地址转账

前提是你 提交于 2020-12-08 16:58:30
编写合约时,默认情况下,是无法向这个合约转ETH的,如果你发起一笔转账交易,目的地址是合约地址,而这个合约地址的代码没有进行特殊处理的话,那么,这笔交易会失败。 那么,如何让合约能够接收转账呢? solidity 0.6之前版本 当合约接收以太时,合约会使用特殊的fallback函数来接收,如果合约没有定义fallback函数,那么交易就会失败。 解决方案就是定义如下的fallabck函数接口: function() external payable{ // some code } solidity 0.6之后版本 如果使用solidity 0.6之后的版本,上面的代码会报错如下: Expected a state variable declaration. If you intended this as a fallback function or a function to handle plain ether transactions, use the "fallback" keyword or the "receive" keyword instead. 需要改为: function () external payable { // 其他逻辑 } 参考: https://medium.com/better-programming/solidity-0-6-you-might

线上Meetup预告 | BSN大赛培训之写出高水准智能合约

自古美人都是妖i 提交于 2020-11-27 09:08:58
3月25日,区块链服务网络BSN第二次开发者大赛正式启动,大赛主题聚焦智能合约开发,参赛者可基于FISCO BCOS等多底层平台编写智能合约。 为了对BSN第二次开发者大赛参赛选手提供针对性的智能合约开发指导,助力参赛者更好实现高质量的智能合约,FISCO BCOS开源社区巡回Meetup联合大赛相关单位,推出智能合约专场培训,以三场视频直播,帮助大家解决在智能合约开发过程中遇到的问题。 本场是系列培训第二场 , 将于5月21日19:30分在腾讯课堂等多平台同步直播 。 为方便获取直播链接,请提前扫描海报二维码添加小助手微信,届时我们将在FISCO BCOS交流群中提醒观看。 直播前大家可以先对智能合约有初步了解,配合社区推出的智能合约系列文章培训效果更佳。 公众号对话框回复 【 学习资料 】 还可获得FISCO BCOS全套学习材料。 FISCO BCOS代码仓库: https://github.com/FISCO-BCOS/FISCO-BCOS Gitee镜像仓库: https://gitee.com/FISCO-BCOS/FISCO-BCOS 了 解 智 能 合 约 概 念 智 能 合 约 初 探 : 概 念 与 演 变 快 速 上 手 智 能 合 约 开 发 F I S C O B C O S 智 能 合 约 开 发 快 速 入 门 如 何 优 雅 地 编 写 智 能 合

简单的区块链代码入门(python演示原理和solidity 的truffle发布)实验

烈酒焚心 提交于 2020-11-21 13:30:35
好久没回CSDN了 本文是几个教程的更新和融合,一部分通过python实现展示简单的区块链结构和过程,一部分用truffle发布简单的solidity智能合约脚本,算是区块链入门(不算吧。。) python区块链模拟脚本(本地) 环境 : 3.7 python win10 import hashlib # class Block: # def __init__(self, data, prev_hash): # self.previous_hash = prev_hash # self.data = data # # # calculate hash # @property # def hash(self): # message = hashlib.sha256() # message.update(str(self.data).encode('utf-8')) # return message.hexdigest() class Block(): """" """ def __init__(self,data,prev_hash): self.previous_hash = prev_hash self.data = data self.nonce = "" @property def hash(self): message = hashlib.sha256() message

2020 DeFi Hackathon@北京

此生再无相见时 提交于 2020-11-18 03:02:16
“DoraHacks is Where Hackers Build, Together” 2020年11月14日-11月15日, DoraHacks将在 北京 发起 DeFi Hackathon。 我 们将邀 请50名区块链开发工程师,50名前端工程师、全栈工程师和设计师 ,Hack DeFi的 新技术、新机制、新项目 。 同时也会邀请50位区块链项目的 投资人 和 社区KoL 参与最后的Demo展示环节。 本次Hackathon希望Hacker可以释放能量,做出好的项目,找到志同道合的伙伴并能与投资人、项目方充分交流获得新机遇。 将向 全国 招募Hacker 100 名 2020年11月14日-15日 北京 赛 制 DeFi: 围绕DeFi主题开发产品、技术,或完善已有产品的技术和功能。 1-5人团队作战: 智能合约开发、产品开发、经济模型设计、产品设计等不同技能的Hacker,1-5人为一战队,思想、技能、行业碰撞。(可提前组队也可以现场组队) 24小时极限挑战: 在规定的24小时内将创意落地或完善已有的产品Demo,向现场观众展示24小时内完成的增量项目Demo。 Bounty奖励: 一些DeFi企业可能通过HackerLink 平台发布赛题和赏金。完成赛题的团队可自动获取USDT、ETH等Bounty 奖励。 招募100名Hacker : 根据Hacker提交的报名信息

TRON智能钱包PHP开发包【零TRX归集】

。_饼干妹妹 提交于 2020-11-06 15:01:31
TronSmartWallet 开发包适用于平台方高效完成对用户或订单地址上的Trx/TRC20代币的归集工作,无需向用户或订单地址注入Trx即可完成Trx/TRC20代币的归集。官方下载地址: TronSmartWallet PHP开发包 。 1、开发包概述 TronSmartWallet开发包的主要特点如下: 真正的平台型非托管钱包,平台无需管理大量用户地址的密钥并且没有安全性的损失 无需向用户地址注入Trx即可完成Trx/TRC20代币的归集,流程更简单,效率更高 支持在单一交易内完成多个用户地址的归集 TronSmartWallet运行于PHP 7.1+环境下,主要类以及其关系如下图所示: TronSmartWallet的主要代码文件清单见官网说明: http://sc.hubwiz.com/codebag/tron-smartwallet/ 。 2、使用示例代码 2.1 部署工厂合约 TronSmartWallet开发包利用工厂合约SmartWalletFacotry管理用户地址的生成与归集。因此首先需要部署工厂合约。 示例代码 demo/deploy-contracts.php 展示了如何部署SmartWalletFactory合约以及一个用于演示的TRC20代币合约。执行如下命令运行示例代码: php deploy-contracts.php 运行结果如下:

以太坊智能合约存储变量的四种数据结构

北慕城南 提交于 2020-10-28 11:38:03
1. storage 合约中可以被所有函数访问的全局变量。storage的存储是永久存储,意味着以太坊会把它存到公链环境里的每一个节点上。 会永久保存合约状态变量,燃料消耗最大。 2. Memory 在合约中的内存变量,生命周期为合约开始到执行结束,执行结束后被销毁。 仅保存临时变量,函数调用之后释放,消耗燃料很少。 3. Calldata 所有函数调用的数据,包括函数参数的保存位置。是不可修改的内存位置。 它包含消息体的数据,其计算需要增加n * 68(n是calldata中的非零字节数)的gas费用 4. Stack EVM为了导入变量和以太坊的机器/汇编指令代码,维护了一个栈,这个栈是EVM的内存工作空间。他有1024级深,也就是如果存储超过了1024级的数据,就会触发一个异常。 栈仅保存很小的局部变量,免费试用,数量限制在16个变量。 参考:以太坊solidity智能合约开发 来源: oschina 链接: https://my.oschina.net/u/4407242/blog/4692153

Solidity 合约调用合约

末鹿安然 提交于 2020-10-28 07:29:41
原文地址:https://medium.com/@k3no/making-a-birthday-contract-858fd3f63618 先将datetime合约部署:https://github.com/pipermerriam/ethereum-datetime pragma solidity ^ 0.4 . 16 ; contract DateTime { /* * Date and Time utilities for ethereum contracts * */ struct _DateTime { uint16 year; uint8 month; uint8 day; uint8 hour; uint8 minute; uint8 second; uint8 weekday; } uint constant DAY_IN_SECONDS = 86400 ; uint constant YEAR_IN_SECONDS = 31536000 ; uint constant LEAP_YEAR_IN_SECONDS = 31622400 ; uint constant HOUR_IN_SECONDS = 3600 ; uint constant MINUTE_IN_SECONDS = 60 ; uint16 constant ORIGIN_YEAR = 1970 ;