Solidity

Solidity - Solidity code to Input JSON Description

谁都会走 提交于 2019-12-06 04:09:40
I want to compile my ehtereum HelloWorld.sol smart contract. In all the tutorials is that you do it like this: var solc = require('solc'); var compiledContract = solc.compile(fs.readFileSync('HelloWorld.sol').toString(); where HelloWorld.sol is: pragma solidity ^0.5.1; contract HelloWorld { bytes32 message; constructor(bytes32 myMessage) public { message = myMessage; } function getMessage() public view returns(bytes32){ return message; } } In other words I put my raw Solidity contract code into the solc.compile() method. But this process gives me this error in compiledContract: '{"errors":[{

solidity语言开发以太坊智能合约中的继承

一世执手 提交于 2019-12-05 12:21:23
我们已经探索了很多主题,在编写智能合约时我们发现经常使用相同的模式:例如,智能合约具有在构造函数中设置的所有者,然后生成修改器以便仅让所有者使用一些功能。如果我们制定实施这些功能的基础合约并在未来的智能合约中重复使用它们那该怎么办?你一定猜得到,我们将使用继承。 在Solidity中,继承与经典的面向对象编程语言非常相似。你首先编写基本智能合约并告知你的新智能合约将从基础合约继承。 你还必须通过复制包含多态的代码来了解Solidity支持多重继承。所有函数调用都是虚函数,这意味着会是调用派生函数最多的函数,除非明确给出了合约名称。当某一个智能合约从多个合约继承时,只在区块链上创建一个智能合约,并将所有基础合约中的代码复制到创建的智能合约中。 让我们写下我们的基本智能合约:它将让我们轻松地为我们的合约添加所有权。我们将其命名为 Ownable 。 OpenZeppelin 的员工写了很多可以在智能合约中使用的可重用代码。这些代码段可通过其工具或其 Github存储库 获得。 这是代码: pragma solidity ^0.4.11; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions,

solidity开发以太坊智能合约时memory和storage的不同

为君一笑 提交于 2019-12-05 12:21:11
在使用solidity开发以太坊智能合约时,可以为变量声明memory和storage关键字。那么,它们有什么不同之处?如果在声明合约变量时没有使用memory关键字,Solidity会尝试在storage中存储这个变量。 storage是什么 根据Solidity首席工程师Chriseth的说法: “你可以把storage想像成一个大数组,它有自己的结构,这个结构是由你的合约中的状态变量所决定的,因此在运行时不能改变” 。 这就是说,storage的结构是在合约部署创建时,根据你的合约中状态变量的声明,就固定下来了,并且不能在将来的合约方法调用中改变这个结构。但是,storage中的内容是可以通过交易来改变的。这些交易调用因此将修改合约的状态,这也是为什么合约中的变量被称为状态变量的原因。因此在合约层面声明的一个uint8类型的storage变量, 它的值可以修改为任何0-255之间的有效uint8值,但是该变量在storage结构中的位置始终不会变化。 函数中的变量 如果你在合约函数中声明变量时没有使用memory关键字,那么solidity将会尝试使用storage结构,目前来讲,这样做可以通过编译,但是可能导致不可预期的结果。memory关键字告诉solidity应当在该函数运行时为变量创建一块空间,使其大小和结构满足函数运行的需要。

Solidity语言代码库与docker镜像

最后都变了- 提交于 2019-12-05 04:25:17
Solidity语言是开发以太坊智能合约的不二选择,本文列举了在solidity学习和开发 中可能对你有帮助的18个资源,包括示例代码、solidity库和预置dapp开发环境的docker镜像。 DigixDAO DigixDAO 提供用于DAO相关数据结构(例如:token)的solidity智能合约库。 网址: https://github.com/DigixGlobal/digixdao-contracts/tree/master/contracts slockit slockit 提供了非常全面的solidity智能合约范例代码集,已经在slock.it项目中应用。 网址: https://github.com/slockit/smart-contract Solidity Baby Steps Soidity Baby Steps —— solidity学步 —— 为初学者提供了非常全面的智能合约范例代码集。 如果你希望系统、高效地学习solidity智能合约和去中心化应用的开发,可以访问 这个 以太坊教程 网址: http://solidity.readthedocs.io/en/latest/solidity-by-example.html Solidity By Exammples 这是最权威的,官方文档中的solidity智能合约范例代码。 网址: http:/

How to return mapping list in Solidity? (Ethereum contract)

允我心安 提交于 2019-12-04 23:04:10
I want to make simple smart contract that has a list, can set item, and can get the list. Code in solidity: contract lister { mapping(int => string) list; int id = 0; function getList() returns ( /*HERE*/ ) { return list; } function setItemToList(string str) { list[id] = str; id++; } } I want to make getList() return the list, but return type is not compatible. How can I do that? Bulk access to lists/arrays/etc is painful in Solidity. You rarely see it in contracts. In your case, a possible solution is to provide a function to access one item, using its index, and to let the caller loops from

一个关于如何成为Java区块链开发人员采访

蹲街弑〆低调 提交于 2019-12-04 16:28:56
最近这些天,区块链是每个开发人员的谈资。来自各个领域的许多软件开发商现在正试图进入区块链市场。我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出区块链开发方面的第一步的,希望对大家有所帮助。 JAXenter:Eugene,请告诉我们您在区块链开发方面的经验。你是怎么开始的? Eugene Kyselev :说起来很平淡,一切都在正确的时间出现,对我来说,区块链开发是一个合乎逻辑的延续。我从JavaScript和其他框架开始,我想继续朝这个方向发展。几年前,随着各种ICO和采矿趋势的开始,我毫不犹豫地决定尝试区块链开发。 区块链开发现在正在以光速发展。区块链技术引起了政府和各国央行的注意;简而言之,一切都表明区块链前景光明。 JAXenter:你认为“区块链时代”将持续多久? Eugene Kyselev :很难说,这就像问“全球化时代将持续多久?” 我认为,只要对加密货币和其他区块链解决方案的需求不断增加,就需要持续一段时间。所有的一切,每件事物都会经历自己的发展,最终出现了加密货币和各种ICO,我很确定现在就是“区块链时代”,区块链技术还有许多其他重要的发现和创新应用。可以带来整个行业的新突破。 JAXenter:为什么要将技术专长转变为区块链开发? Eugene Kyselev :没有所谓的技术技能转变这样的东西

solidity教程:solidity开发入门

我的未来我决定 提交于 2019-12-04 15:16:58
这篇关于Solidity教程的博客展示了很多Solidity特性。本教程假定你对以太坊虚拟机和编程有一定的了解。 以太坊,“世界计算机”提供了一个非常强大的全球共享基础设施,使用名为Solidity的编程语言构建去中心化应用程序。 让我们开始我们的Solidity教程,介绍Solidity。 什么是Solidity? 以太坊Solidity是一种面向智能合约的高级语言,其语法与JavaScript类似。solidity是用于生成在EVM上执行的机器级代码的工具。solidity编译器获取高级代码并将其分解为更简单的指令。Solidity代码封装在Contracts中。 以太坊合约中的solidity 合约是以太坊去中心化应用程序的基本构建模块。所有变量和函数都是合约的一部分,这是所有项目的起点。一个名为MyFirst的空合约看起来像这样: version pragma ^0.4.19; contract MyFirst{ } 盯紧你的屏幕因为接下来在我们的Solidity教程中我们将开始编码...... Solidity文件的布局 源文件可以包含任意数量的合约定义,包括指令和pragma指令。 Version Pragma Version Pragma是定义代码使用的Solidity编译器版本的声明。 version pragma ^0.4.00; 注意

Solidity陷阱:以太坊的随机数生成

无人久伴 提交于 2019-12-04 03:49:29
title: Solidity陷阱:以太坊的随机数生成 Solidity是一种相当新的语言,因为没有代码是完美的,它包含与代码相关的问题以及你希望用它完成的任务。本文将指导你使用随机数作为以太坊智能合约的输入时的最佳实践和陷阱。 Solidity随机数生成 Solidity无法创建随机数。实际上,每个创建随机数的算法都是伪随机的——没有语言能够创建完全随机的数字。Solidity的问题在于复杂的算法成本太高,因此使用了更基本的解决方案。除此之外,Solidity代码应该是确定性的,因为它将在多个节点上运行。我们需要一种能够生成一次随机数的算法,并在多个节点上使用它。像时钟时间这样的东西不能用于生成随机数,因此我们必须查看其他选项。作为开发人员,你应该了解此问题,因为攻击者能够在某些特定情况下预测结果。 最常用的算法之一是“线性同余发生器”(LCG)。它是最古老的算法之一,快速且易于理解。LCG是嵌入式系统的一个很好的选择,因为它们的内存有限。但是,它不适合加密安全应用程序。虽然,这仍然在智能合约中使用,因为快速算法在气体成本方面实施起来便宜得多。 算法本身执行以下步骤: 接受输入。 在输入上执行算法。 取输出模数(除以你需要的范围内的最大数量)。 在你需要的范围内输出0到最大数字。 让我们探讨使用彩票智能合约示例创建随机数的不同方法。用户可以通过向合约发送0

Converting Object Promise to String in Javascript

巧了我就是萌 提交于 2019-12-04 03:49:22
问题 I'm working with React, Next.Js, semantic-ui-react and Solidity. It is my goal to print out the users address (from MetaMask) and a ProjectTitle (set by User) as meta infomation for a semantic-ui-react card. To print out the address in the 'header' is working, but I'm not able to print out the ProjectTitle as 'meta'. The Title should be a String but I'm receiving a Object Promise. static async getInitialProps() { const projects = await factory.methods.getDeployedProjects().call(); return {

私有区块链Hyperledger Fabric和公共区块链ARK.io如何通过solidity智能合约结合

喜夏-厌秋 提交于 2019-12-03 13:07:01
我想展示如何将公共区块链(如ARK.io)的功能与私有区块链(如Hyperledger)结合起来。特别是,我们将看到ARK.io上的交易如何触发在Hyperledger Fabric + Burrow中部署的Solidity Smart Contract的执行。 安装Hyperledger Fabric 删除以前的Hyperledger Docker镜像(如果有): docker kill $(docker ps -q) docker rm $(docker ps -aq) docker rmi $(docker images dev-* -q) 安装先决条件: https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html 安装依赖项: https://hyperledger-fabric.readthedocs.io/en/latest/install.html cd ~ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0 设置环境变量: vi ~/.profile PATH="$HOME/bin:$HOME/.local/bin:$PATH" GOPATH="$HOME/go" FABRIC_CFG_PATH="$GOPATH/src/github.com