建议和反馈

请填写你的反馈内容

  • 币市问道:一些技术性干货,希望能帮到迷茫的你

    一、“锤子线”与“上吊线”解释  1、“锤子线”  锤子线是指K线型态象一把锤子,下影线很长,没有或只有很短、可以忽略不计的上影线,开盘价和收盘价价位很接近,看上去就象锤子形状。锤子线又分为锤子线和倒锤子线。倒锤子线是指倒过来的锤子线,不像前者是锤头在上,锤柄在下;而是锤头在下,锤柄在上,上影线很长,没有下影线或只有很短、可以忽略不计的下影线。  锤子线的形态特征:出现在下跌途中,小实体在K线的顶部,实体颜色(红、绿)无所谓;下影线的长度应该比实体的长度长得多,一般认为下影线应是实体的两倍以上。(如图)  2、“上吊线”  上吊线是极为常见的K线形态之一,从字面上看就给人一种阴森可怕感觉,在实战中常常利用它来制造一些恐怖气氛,以达到某种目的,因此熟悉上吊线的特征和内涵对操作股票有一定的意义。  所谓上吊线,顾名思义,就是形状酷似上吊样子的K线。它表示一个交易日里股价低开或平开,然后盘不断振荡下挫,只到收盘时才将股价拉起,停在高位留下一根长长的下阴线。一般是见顶的信号。上吊线出现时,后市往往看淡。  上吊线的形态特征:出现在上升途中,小实体在K线的顶部,实体颜色(红、绿)无所谓;下影线的长度应该比实体的长度长得多,一般认为下影线应是实体的两倍以上。(如图)  二、锤子线与上吊线相同之处  实体处于整个价格区间的上端;  下影线的长度至少达到实体高度的2-3倍;  没有上影线,即使有上影线,其长度也极短;  在快速运动后出现的锤子线或上吊线,一般需要后K线来验证。 三、锤子线与上吊线区别  锤子线与上吊线本身是一种图形,只是出现的位置不同而叫法不同;锤子线一般出现在股价经过一段时间的下跌,要有一定的跌幅,即是阶段循环底部,叫锤子线;上吊线出现在股价经过一段时间的上涨有一定的涨幅相对的高位,称为上吊线。  在看涨的锤子线实体是白色其意义更坚挺,在看跌的上吊线实体是黑色其意义更坚挺;判断锤子线之前必定有一段下降趋势,上吊线必须出现在一段上升趋势之后;在双锤子线中,其收盘价应该一个比一个更高,在双上吊线中,其收盘价应该一个比一个更低;在大阴线后出现的锤子线或大阳线出现的上吊线,一般都需要后K线的验证才能构成反转形态。  四、锤子线与上吊线形态原理  1、锤子线:市场在做空一段时间后,价格不断下跌,卖方力量逐步消耗,而买方力量慢慢积聚,在某一交易日,价格大幅下跌,但底部此时以明显呈现极强的吸纳愿望,有买家大力将价格上推,一直达到当天最高收市或是接近最高收市价位收市。锤子线,一般处于下跌势中,表明市场可能见底,如果当天收市价高于开市价(红色锤子线),对于买方更是利好标志。  2、上吊线:  市场在屡屡做多后,买卖双方力量达到平衡,在一个交易日内,多方努力将价格上推,创出当天新高后,并无心维持高位,价格大幅下跌,卖方力量势不可挡,多日来卖方被压制的能量瞬间释放,价格大力下挫,但当天收市价仍处于较高位置,接近最高价,形成实体部分相当小。上吊线,一般处于上扬市中,表明市场可能见顶,阴线比阳线效果更好。 五、锤子线与上吊线市场含义  1、锤子线的市场含义  行情处于一个下降趋势中,价格一连几天收了阴线,当天开盘的时候,投资者疯狂卖出,当市场空头力量即将怠尽的时候,投资者纷纷结利出场,由于投资者的获利了结,导致了价格的反弹,由最低价回到了最高价或者接近最高价的位置,这个时候如果收盘价高于开盘价,收出了一根阳线,而且下影线又是实体的2-3倍,大家看过K线的介绍都知道长长的下影线就是代表多方的反击,这个时候等待多头的投资者认为这是个是最佳的入场机会,而且这个时候也是投资者不敢做空的位置,第二天价格继续高走,收盘价高于前一天的收盘价,这样锤子线的反转的市场含义就得到了证实。  2、上吊线的市场含义  K线处于上涨的趋势中,市场中多方明显占据了优势,股价一连几天收了阳线。在上吊线这一天,市场的开市价就是当日的最高价(或者当日的开市价接近最高价)。之后市场一度剧烈下跌,后来再上冲,最后收盘于最高价的水平,或者接近最高价的水平,K线本身也拉出了长长的下影线,符合上吊线的特点。从上吊线的价格演化过程本身看来,未必令人联想到顶部反转形态。然而,这个价格变化过程预示着,一旦市场遭到空方的打压,就会不堪一击,迅速引发市场的向下突破。次日,如果市场开市在较低的水平,那么,凡是在上吊线当日的开市、收市时买进的投资者都被“吊”在上面。综合上述分析,就得到了关于上吊线的一条普遍原则:上吊线的实体与上吊线次日的开市价之间向下的缺口越大,那么上吊线就越有可能构成市场的顶部。在上吊线之后,如果市场形成了一条黑色的实体,并且它的收盘价低于上吊线的收盘价,那么,这也可以看作上吊线成立的佐证,市场含义也就得到了证实。  上吊线是带有长下影线(上影线很短),而无上影线的K线,是股价上涨的重要预示。应用上吊线形态测市时,应注意三个问题:①若上吊线实体部分与前一根K线形成跳空缺口,则说明追高一族的成本高于前一天,此时多为散户行为。②上吊线出现后的第二根K线一般为阴线,阴线的长度越长,新一轮跌势开始的概率就越大。③上吊线出现时,若当时成交量萎缩,则要等待出现下一个确认信号才能做出最后的判断。  上吊线是比较明显的转势信号,通常情况下,一段行情出现了上吊线,一般都应该引起足够的重视。上吊线出现时,如果股价是上涨一段时间,涨幅已经巨大,那末就应该意识到可能是庄家出货,有经经验的投资者应该减仓,如成交放出巨量,则应该卖掉出局观望。上吊线出现如果是在股票刚刚起动,则应看着是主力的振仓行为,应该持股不动。如果成交量萎缩,则更能说明问题。  六、锤子线与上吊线操作策略  1、首先应判断其是否可靠,是否为反转形态。可以根据上面的形态特征加以分析,还需要观看第2天走势是否配合反转,不可盲目建重仓进场,可以当日建轻仓(比如1/10仓或更小等)试探,注意设好止损位。  2、上吊线看跌信号的确立,还应谨慎看其是在市场顶部,还是中继指标。如果上吊线的实体与次日的开市价之间向下的缺口越大,那么构成市场顶部的可能就越大。在收出上吊线后是一根大阴线,这就进一步验证了上吊线,投资者可随后逐步建立空仓。  3、形成顶与底后,其后市有可能出现反抽,即价格再度试探锤子线底部,只要不破最低位,锤子线见底形态依然有效。  4、连续两天出现上吊线必须卖出;连续两天出现锤子线可以买进。  5、出现上吊线以后开盘没有站上收盘价或30分钟没能收回,激进的可以卖出;稳健的等到收盘前看有没有站在上吊线的收盘价,如果没有站在上吊线收盘价则卖出,如果站上不卖。  6、如果第二天开盘价站在上吊线的收盘价,上吊线失去意义,看后期走势决定买与不卖。 七、锤子线与上吊线注意事项  这两种K线形态,都既可以是看涨的,也可以是看跌的。在使用这两种图线时,首先要确定在它之前确实是有一段上涨或下跌的行情,而这两种图线又分别位于这段趋势的最高点或最低点。在这两种图线出现后,最好是等待下根K线的确认。比如说,在日线图上,上吊线的次日,市场开盘在较低的水平,上吊线的实体与上吊线次日的开市价之间向下的缺口越大,那么上吊线就越有可能构成市场的顶部,在上吊线之后,如果市场形成了一个黑色的实体,并且它的收市价低于上吊线的收市价,那么这根阴线就可以做为趋势反转的确认。锤子线的方向则与它相反。  上吊线也常常会出现在主力盘中震荡洗盘的时候,而判断顶部形态的上吊线和整理形态的上吊线通常可用以下两点进行区分:  1、上吊线出现的位置。如果股价在高位出现上吊线形态,则形成顶部的可能性较大;相反,如果股价刚脱离底部,则其成为整理形态的可能性较大。  2、上吊线形成时的成交量。如果上吊线伴有巨大的成交量,尤其是出现近期天量的时候,投资者要特别警惕股价可能会出现单日反转。相反,如果上吊线形成时,成交量大幅萎缩,投资者应等待出现另一个确认信号,以免落入陷阱。  ————文/币市问道  
    问道  ·  2018-12-12
    0阅读  ·  0赞赏  ·   0问答
  • 安装构建以太坊钱包Parity

    Parity内置容易用到以太坊的钱包和dapp的环境,而且可以通过浏览器访问,被认为是和以太坊区块链交互的最快速和安全的方式,并未公共以太网网络的大部分基础都提供支持。Parity是一个很活跃的开源项目。二进制你可以通过源码构建Parity Ethereum;使用为Linux,Mac/Homebrew和Windows操作系统提供的最新版本的二进制文件启动Parity Ethereum,或者如果你使用的是Ubuntu Snappy平台,则只需使用Snappy App。 一行代码就可以通过二进制文件安装程序 这种方法比从源代码构建方法快,但它只适用于安装了Homebrew的Ubuntu和Mac。它将为你安装和配置Parity Ethereum客户端。要使用该脚本,只需运行:$ bash <(curl https://get.parity.io -L) 使用适合你平台的二进制文件提供了Parity Ethereum的二进制文件。如果你想尝试这些,可以在releases页面上下载。Linux 从上面的链接下载最新版本。通过运行chmod u+x parity使parity文件可执行。使用你最喜爱的方式启动Parity:./parity --chain dev --jsonrpc-apis personalWindows和Mac 下载二进制文件并双击它。 依赖对于Linux系统:Ubuntu,Debian  $ apt-get install build-essential openssl libssl-dev libudev-devCentOS  $ yum install openssl libssl-devel libudev-devel openssl-devel  $ yum group install "Development Tools" 从源代码构建要从源代码构建Parity Ethereum,请遵循readme中的说明。对于以太坊密钥管理,可以使用ethstore。要编译一下才能使用。$ cargo build --release -p ethstore-cli在Parity Ethereum根目录中使用,看看帮助:$ ./target/release/ethstore --help 使用Docker构建Docker适合兼容操作系统,我们可以使用类似的指令来完成任何Linux安装或者Mac Homebrew系统的构建,当然如果它在某些效忠发行版中不起作用也不要抱怨会花费长时间来搞定他们,相反,我们应该让它 镜像继续工作,然后找出差异。注意:确保你已在使用docker。$ docker run -it ubuntu bash这将为你提供临时的docker环境。Grab Rust注意:如果你的环境中已经有Rust,则无需为此烦恼。下面的命令将在Linux和OS X上下载并安装Rust:$ curl https://sh.rustup.rs -sSf | SH如果你使用的是Windows,请确保已安装带有C++支持的Visual Studio 2015。确保在VS2015 x64 Native Tools命令提示符中运行所有后续内容。注意:我们不支持Windows上的GNU工具集。不要安装它,也不要安装任何的Rust版本并使用它。如果你在任何地方看到x86_64-pc-windows-gnu,那你就是错了!下载并运行rustup,使用以下命令设置MSVC工具链:$ rustup default stable-x86_64-pc-windows-msvc 安装和构建Parity接下来,克隆Parity Ethereum存储库:$ git clone https://github.com/paritytech/parity$ cd parity为了测试方便,还要更新子模块:$ git submodule init$ git submodule update你可以建立:$ cargo build你可以使用以下命令运行单元测试:$ ./test.sh你可以使用以下方式运行共识测试:$ cargo test --release --features ethcore/json-tests -p ethcore要在Linux和Mac OS上安装Parity Ethereum,只需构建它并将其复制到/usr/local/bin:$ cargo build --release && cp target/release/parity /usr/local/bin对于Windows,使用copy将其复制到C:/Windows:$ cargo build --release$ copy target/release/parity C:/Windows你可以启动客户端并与网络同步:$ cargo run --release要获得有关parity客户端的命令行选项的帮助,请使用--help:$ cargo run --release --help关于使用Docker备份datadir的注意事项如果你需要保留区块链文件,密钥等,你应该使用--base-path选项运行映像然后安装它,例如:$ docker run --name parity -v /srv/parity:/mnt ethcore/parity:beta --base-path /mnt 
    Ethan  ·  2018-12-12
    88阅读  ·  0赞赏  ·   0问答
  • 智能合约语言 Solidity 类型介绍

    智能合约语言 Solidity  类型介绍 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,毕竟如果你不是很了解的话,未必知道本篇是讲的什么,So,萌新就不要来看了,很高深哦~哈哈,开个小玩笑。类型Solidity是一种静态类型的语言,也就是说需要在编译时指定变量的类型,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约。其可以提供基础的来组合成复杂的类型。Solidity类型分为两类:1.值类型: 变量在赋值或传参时,总是进行值拷贝。2.引用类型值类型(Value Type)值类型包含:布尔类型(Booleans)整型(Integers)定长浮点型(Fixed Point Numbers)定长字节数组(Fixed-size byte arrays)有理数和整型常量(Rational and Integer Literals)字符串常量(String literals)十六进制常量(Hexadecimal literals)枚举(Enums)函数类型(Function Types)地址类型(Address)地址常量(Address Literals) 布尔类型(Booleans)布尔(bool):可能的取值为常量值true和false。布尔类型支持的运算符有:!逻辑非&& 逻辑与|| 逻辑或== 等于!= 不等于注意:运算符&&和||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y)。 整型(Integers)int/uint: 表示有符号和无符号不同位数整数。支持关键字uint8 到 uint256 (以8步进),uint 和 int 默认对应的是 uint256 和 int256。支持的运算符:比较运算符: <=, < , ==, !=, >=, > (返回布尔值:true 或 false)位操作符: &,|,^(异或),~(位取反)算术操作符:+,-,一元运算-,一元运算+,,/, %(取余数), **(幂), << (左移位), >>(右移位)说明:整数除法总是截断的,但如果运算符是字面量(字面量稍后讲),则不会截断。整数除0会抛异常。移位运算的结果的正负取决于操作符左边的数。x << y 和 x 2**y 是相等, x >> y 和 x / 2**y 是相等的。不能进行负移位,即操作符右边的数不可以为负数,否则会抛出运行时异常。注意:Solidity中,右移位是和除等价的,因此右移位一个负数,向下取整时会为0,而不像其他语言里为无限负小数。有理数和整型常量(Rational and Integer Literals)也有人把Literals翻译为字面量整型常量是有一系列0-9的数字组成,10进制表示,比如:8进制是不存在的,前置0在Solidity中是无效的。10进制小数常量(Decimal fraction literals)带了一个., 在.的两边至少有一个数字,有效的表示如:1., .1 和 1.3.科学符号也支持,基数可以是小数,指数必须是整数, 有效的表示如: 2e10, -2e10, 2e-10, 2.5e1。数字常量表达式本身支持任意精度,也就是可以不会运算溢出,或除法截断。但当它被转换成对应的非常量类型,或者将他们与非常量进行运算,则不能保证精度了。如:(2*800 + 1) - 2*800的结果为1(uint8整类) ,尽管中间结果已经超过计算机字长。另外:.5 * 8的结果是4,尽管有非整形参与了运算。只要操作数是整形,整型支持的运算符都适用于整型常量表达式。如果两个操作数是小数,则不允许进行位运算,指数也不能是小数。注意:数字常量表达式,一旦其中含有常量表达式,它就会被转为一个非常量类型。下面代码中表达式的结果将会被认为是一个有理数:uint128 a = 1;uint128 b = 2.5 + a + 0.5;上述代码编译不能通过,因为b会被编译器认为是小数型。字符串常量字符串常量是指由单引号,或双引号引起来的字符串 (“foo” or ‘bar’)。字符串并不像C语言,包含结束符,”foo”这个字符串大小仅为三个字节。和整数常量一样,字符串的长度类型可以是变长的。字符串可以隐式的转换为byte1,…byte32 如果适合,也会转为bytes或string。字符串常量支持转义字符,比如\n,\xNN,\uNNNN。其中\xNN表示16进制值,最终转换合适的字节。而\uNNNN表示Unicode编码值,最终会转换为UTF8的序列。十六进制常量(Hexadecimal literals)十六进制常量,以关键字hex打头,后面紧跟用单或双引号包裹的字符串,内容是十六进制字符串,如hex”001122ff”。它的值会用二进制来表示。十六进制常量和字符串常量类似,也可以转换为字节数组。枚举(Enums)在Solidity中,枚举可以用来自定义类型。它可以显示的转换与整数进行转换,但不能进行隐式转换。显示的转换会在运行时检查数值范围,如果不匹配,将会引起异常。枚举类型应至少有一名成员。下面是一个枚举的例子:pragma solidity ^0.4.0;contract test {    enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }    ActionChoices choice;    ActionChoices constant defaultChoice = ActionChoices.GoStraight;    function setGoStraight() {        choice = ActionChoices.GoStraight;    }    // Since enum types are not part of the ABI, the signature of "getChoice"    // will automatically be changed to "getChoice() returns (uint8)"    // for all matters external to Solidity. The integer type used is just    // large enough to hold all enum values, i.e. if you have more values,    // `uint16` will be used and so on.    function getChoice() returns (ActionChoices) {        return choice;    }    function getDefaultChoice() returns (uint) {        return uint(defaultChoice);    }}   
    Ronaldo  ·  2018-12-12
    102阅读  ·  2赞赏  ·   0问答
  • 区块链中的去中心化

    “去中心化”是加密经济学领域中使用频率最高的词汇之一,同时也是区块链中最为关键的特性,但是其定义一直模糊不清。为了实现去中心化,迄今为止,人们已经花费数千小时的研究,投入了数十亿美元的哈希算力,持续投入以维持、提高去中心化的程度。辩论激烈时,协议(或协议扩展)支持者为了击倒对方,往往试图声称对方是“中心化”的。其实P2P架构早已有之,所以“去中心化”并不是一个新的概念。现在P2P我们了解了,计算机之间可以相互沟通了。中心化的好处是认证、管理机制明确统一,可以集中力量办大事,效率高;而弊端是管理、仲裁工作庞杂,机制上的任何缺陷都会造成问题,同时缺少权力的制约,从而出现不堪重负或者集中力量办坏事的情况。所以就有了以去中心化弥补中心化不足的需求。从社会发展上来讲,在以前由于技术的限制和制度的约束,不管是人人自由还是人人平等,理想很丰满,但现实有点骨感。而区块链的出现在技术上实现了真正去中心化的可能,而这也必将促进社会的变革和进步。去中心化的三种类型当人们在讨论软件去中心化时,实际上他们是在讨论三个独立的维度,通常情况下三个维度相互独立,但是在某些情况下,也存在相互依赖关系。如下所示  架构层面的去中心化:系统由几台物理计算机组成?系统最多可以承受几台计算机同时崩溃?  控制权层面的去中心化:有多少个体或者组织拥有系统的实际控制权?  逻辑层面的去中心化:系统呈现和维护的接口和数据结构看起来更像一个整体,还是非晶群?一个简单的启发是:如果将系统分为提供者和用户两部分,那么这两个部分是否作为独立单元继续正常运行。 去中心化的三个原因通常会有以下几种论点:容错性——由于去中心化系统由独立的节点组成,因此在整体上不容易遭到破坏。抗攻击性——由于去中心化系统不再具有敏感的中心枢纽,因此其攻击成本和难度大大提升,也更难遭到破坏和操纵。 防合谋性——组成去中心化系统中的任意个体很难通过合谋等方式为自己谋取更多的利益,而在现实公司和政府机构中,为牟取私利而勾结相对容易地多。 在区块链中,还有核心的技术,非对称加密家属、点对点通信技术、与共识机制。这些核心技术组合在一起就会实现区块链网络链条的唯一、数据的唯一性,这还会保障系统的正常运行,毕竟在这里面却一项都不不可以的。
    Cristante  ·  2018-12-12
    118阅读  ·  0赞赏  ·   0问答
  • Web3与智能合约交互实战

    Web3与智能合约交互实战 以太坊中智能合约和web3交互实战 最近区块链、以太坊非常的火,所有就会有很多人去进入区块链这个行业,也有很多人去学习。所以在最初学习以太坊的时候,很多人都是自己创建以太坊节点后,使用geth交互。但是不能指望普通用户通过命令使用dapp。因此我们需要一种友好的方式来与智能合约交互,那么这种问题的答案就是web3.js。 Web3.jsWeb3.js是以太坊官方的API,可以帮助智能合约开发者使用HTTP或者IPC与本地、远程的以太坊节点交互。实际就一个库的集合。当然了也包括几个库,比如:web3-eth用来与以太坊区块链和智能合约交互web3-shh用来控制whisper协议与p2p通信以及广播web3-bzz用来与swarm协议交互web3-utils包含了一些Dapp开发有用的功能Web3与geth通信使用的是 JSON-RPC ,这是一种轻量级的RPC协议,整个通信的模型可以抽象为下图。  搭建测试链在开发的初期的时候,我们并不必用真实的公链,为了开发的效率,一般都是用本地搭建测试链。在这里我们就选择用Ganache,一个图形化测试软件,可以一键在本地搭建以太坊区块测试环境,且用区块链的状态显示出来。 从图中可以看到Ganache会默认创建10个账户,监听地址是http://127.0.0.1:7545,可以实时看到Current Block、Gas Price、Gas Limit等信息。 创建智能合约目前以太坊官方全力支持的智能合约开发环境是Remix IDE,我们在合约编辑页面编写如下代码:pragma solidity ^0.4.21;contract InfoContract {   string fName;   uint age;     function setInfo(string _fName, uint _age) public {       fName = _fName;       age = _age;   }   function getInfo() public constant returns (string, uint) {       return (fName, age);   }   }代码很简单,就是简单的给name和age变量赋值与读取,接下来切换到 run 的 tab 下,将Environment切换成Web3 Provider,并输入我们的测试链的地址http://127.0.0.1:7545,这里对这三个选项做一简单说明:Javascript VM:简单的Javascript虚拟机环境,纯粹练习智能合约编写的时候可以选择Injected Web3:连接到嵌入到页面的Web3,比如连接到MetaMaskWeb3 Provider:连接到自定义的节点,如私有的测试网络。如果连接成功,那么在下面的Account的选项会默认选择 Ganache 创建的第一个账户地址。接下来我们点击Create就会将我们的智能合约部署到我们的测试网中。接下来 Remix 的页面不要关闭,在后面编写前端代码时还要用到合约的地址以及ABI信息。安装Web3在这之前,先在终端创建我们的项目:> mkdir info> cd info接下来使用 node.js 的包管理工具 npm 初始化项目,创建package.json 文件,其中保存了项目需要的相关依赖环境。> npm init一路按回车直到项目创建完成。最后,运行下面命令安装web.js:> npm install web3 创建 UI在项目目录下创建index.html,在这里我们将创建基础的 UI,功能包括name和age的输入框,以及一个按钮,这些将通过 jQuery 实现:<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title>    <link rel="stylesheet" type="text/css" href="main.css">    <script src="./node_modules/web3/dist/web3.min.js"></script></head><body>    <div>        <h1>Info Contract</h1>        <h2 id="info"></h2>        <label for="name" class="col-lg-2 control-label">Name</label>        <input id="name" type="text">        <label for="name" class="col-lg-2 control-label">Age</label>        <input id="age" type="text">        <button id="button">Update Info</button>    </div>    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>    <script>       // Our future code here..    </script></body></html>接下来需要编写main.css文件设定基本的样式:body {    background-color:#F0F0F0;    padding: 2em;    font-family: 'Raleway','Source Sans Pro', 'Arial';}.container {    width: 50%;    margin: 0 auto;}label {    display:block;    margin-bottom:10px;}input {    padding:10px;    width: 50%;    margin-bottom: 1em;}button {    margin: 2em 0;    padding: 1em 4em;    display:block;}#info {    padding:1em;    background-color:#fff;    margin: 1em 0;} ##使用Web3与智能合约交互UI 创建好之后,在<script>标签中间编写web.js的代码与智能合约交互。首先创建web3实例,并与我们的测试环境连接:<script>    if (typeof web3 !== 'undefined') {        web3 = new Web3(web3.currentProvider);    } else {        // set the provider you want from Web3.providers        web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));    }</script>这段代码是web3.js Github提供的样例,意思是如果web3已经被定义,那么就可以直接当作我们的 provider 使用。如果没有定义,则我们手动指定 provider。在上面代码的基础上,接下来设置默认的以太坊账户:web3.eth.defaultAccount = web3.eth.accounts[0];在上文中我们使用 Ganache 已经创建了 10 个账户了,这里我们选择第一个账户当作默认账户。接下来需要让我们的web3知道我们的合约是什么样的,这里需要用到合约的 ABI(Application Binary Interface)。ABI可以使我们调用合约的函数,并且从合约中获取数据。在上文中我们已经在 Remix 中创建了我们的合约,这时重新回到 Remix,在 Compile 的 tab 下我们点击Details 出现的页面中我们可以拷贝合约的ABI,如下图所示。将其复制到代码中:var infoContract = web3.eth.contract(PASTE ABI HERE!);接下来转到 run 的tab,拷贝合约的地址,将其复制到下面的代码中:var info = InfoContract.at('PASTE CONTRACT ADDRESS HERE');完成这些我们就可以调用合约中的函数了,下面我们使用 jQuery 与我们的合约进行交互:info.getInfo(function(error, result){    if(!error)        {            $("#info").html(result[0]+' ('+result[1]+' years old)');            console.log(result);        }    else        console.error(error);});$("#button").click(function() {    info.setInfo($("#name").val(), $("#age").val());});以上的代码就简单地实现了对合约中两个函数的调用,分别读取和显示name和age变量。到此我们就完成了全部的代码,完整代码可以在 InfoContract 中找到。在浏览器中打开index.html测试效果如下图(输入名字和年龄后刷新)。   毕竟也说了,最近区块链以太坊都很火,也就会有很多衍生的应用,需要我们去多学习学习笔记那个跟上节奏嘛。今天就讲到这里,因此我们需要一种友好的方式来与智能合约交互,那么这种问题的答案就是web3.js。所以可以仔细仔细看一看,希望对大家有些帮助。
    tothemoon  ·  2018-12-12
    133阅读  ·  2赞赏  ·   0问答
  • 君临说币:比特币在成为世界货币的道路上,从未停止脚步

    “目前,与较难理解相比,比特币更容易被忽视。但我们认为,比特币的长期价值受两大因素推动: 1、它是一种抗审查的价值储存手段; 2、它是一种与国家行为无关数字储备货币。”据bitcoin.com12月12日报道,Delphi Digital发布了一份名为《比特币现状》的报告,这份长达59页的报告对比特币进行了深入研究,涵盖了从比特币支付到首次代币发行(ICO),再到与股票、黄金在滚动收益方面的对比等内容。这份报告大量有意思的数据证明了比特币正在不断发展和普及。两大因素支撑长期存在价值今年市场行情低迷,有不少人质疑比特币的存在价值。加密资产投资公司Delphi Digital发布的这份报告指出:“目前,与较难理解相比,比特币更容易被忽视。但我们认为,比特币的长期价值受两大因素推动: 1、它是一种抗审查的价值储存手段; 2、它是一种与国家行为无关数字储备货币。”Delphi Digital特别关注比特币在最需要它的国家(受通胀影响最大的的阿根廷和委内瑞拉)的发展情况。在这两个国家,以及世界上“无银行账户”人群最多的地区(主要是非洲),加密货币有着巨大的潜力。报告总结了这些国家采用BTC的三个主要因素:1、替代遭受恶性通货膨胀的当地货币; 2、允许公民直接持有他们的财富,而不是把它交给当地的银行; 3、提高汇款速度,降低汇款手续费。例如,南非和博茨瓦纳两地之间200美元汇款的平均成本高达36美元,如果通过比特币来完成,手续费会低很多。但是BTC的用例不止于此,报告写道:“在过去,当国家出现高通胀时,人们除了眼睁睁地看着自己的积蓄在一夜蒸发之外,几乎无能为力。但现在,任何能够上网的人都可以将其转换为比特币,从而免受本地货币风险的影响。”分析UTXO推断:BTC将在2019年Q1触底对于比特币目前正在经历的市场周期,UTXO(未花费的交易输出)的统计数据能提供了有关的线索,可以暗示接下来可能会发生什么。在下图中,Delphi Digital用一条绿线表示至少有一年历史的UTXO,也就是超过一年没有使用的硬币。作为BTC整个UTXO系统的一部分,对至少有一年历史的 UTXO的百分比进行监控可以显示,比特币持有者将于何时开始再次转移他们的比特币,无论是出售、交易还是购买商品和服务。该报告写道:“在2018年下半年,1年UTXO开始与1-2年UTXO一样呈现正增长趋势,但年数更久的UTXO变化不大。我们相信现在正在经历一个与2014年下半年类似的积累过程。”黑线表示对数刻度的BTC价格,绿线表示的是至少一年没有使用的比特币UTXO百分比对于那些想寻找市场复苏迹象的人来说,这份报告的一个关键看点是基于UTXO分析做出的推测:“比特币在近期可能面临额外的抛售压力,但根据对之前繁荣&萧条周期中持有者动态的分析,可能价格将在2019年第一季度触底。”受益人群范围持续扩大比特币的美妙之处在于,对许多人来说,它可以用来做很多事情。比特币不仅可以为遭受恶性通货膨胀地区的人们提供避风港,对于政府、中央银行等所谓1%的人群来说,它也同样很有价值。该报告称:“经过一段时期的发展,当比特币成为一种成熟的价值储存方式时,各国央行有必要在外汇储备中持有一小部分比特币,以作为黄金的补充。”虽然这些仅仅只是推测,但不可否认的是,比特币与以往任何货币体系都不一样。即便是在白皮书问世10年后的今天,比特币仍然有应用场景正在源源不断的被发现。本文由君临说币独家编撰,转载请注明出处。投资有风险,入市需谨慎!想要了解更多资讯策略建议可以关注小编
    君临说币  ·  2018-12-12
    142阅读  ·  0赞赏  ·   0问答
  • GO基础编程-自定义函数

      定义格式函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。 Go 语言函数定义格式如下:func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) {    //函数体、    return v1, v2 //返回多个值}函数定义说明:func:函数由关键字 func 开始声明funcName:函数名称,根据约定,函数名首字母小写即为private,大写即为public参数列表:函数可以有0个或多个参数。返回类型: ① 上面返回值什么两个变量名,当然这不是必须的,可以有类型,没变量。② 如果只有一个返回值且不声明返回值变量,那么你可以省略,包括返回值的括号。 ③ 如果没有返回值,那么就直接省略最后的返回信息。 ④ 如果有返回值, 那么必须在函数的内部添加return语句函数定义。无参无返回值func Test() { //无参无返回值函数定义    fmt.Println("this is a test func")} func main() {    Test() //无参无返回值函数调用}有参无返回值普通参数列表func Test01(v1 int, v2 int) { //方式1    fmt.Printf("v1 = %d, v2 = %d\n", v1, v2)}func Test02(v1, v2 int) { //方式2, v1, v2都是int类型    fmt.Printf("v1 = %d, v2 = %d\n", v1, v2)}func main() {    Test01(10, 20) //函数调用    Test02(11, 22) //函数调用}不定参数列表不定参数类型不定参数是指函数传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受不定参数类型://形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数func Test(args ...int) {    for _, n := range args { //遍历参数列表        fmt.Println(n)    }}func main() {    //函数调用,可传0到多个参数    Test()    Test(1)    Test(1, 2, 3, 4)}不定参数的传递func MyFunc01(args ...int) {    fmt.Println("MyFunc01")    for _, n := range args { //遍历参数列表        fmt.Println(n)    }}func MyFunc02(args ...int) {    fmt.Println("MyFunc02")    for _, n := range args { //遍历参数列表        fmt.Println(n)    }}func Test(args ...int) {    MyFunc01(args...)     //按原样传递, Test()的参数原封不动传递给MyFunc01    MyFunc02(args[1:]...) //Test()参数列表中,第1个参数及以后的参数传递给MyFunc02}func main() {    Test(1, 2, 3) //函数调用}无参有返回值有返回值的函数,必须有明确的终止语句,否则会引发编译错误。一个返回值func Test01() int { //方式1    return 250}//官方建议:最好命名返回值,因为不命名返回值,虽然使得代码更加简洁了,但是会造成生成的文档可读性差func Test02() (value int) { //方式2, 给返回值命名    value = 250    return value} func Test03() (value int) { //方式3, 给返回值命名    value = 250    return}func main() {    v1 := Test01() //函数调用    v2 := Test02() //函数调用    v3 := Test03() //函数调用    fmt.Printf("v1 = %d, v2 = %d, v3 = %d\n", v1, v2, v3)}多个返回值func Test01() (int, string) { //方式1    return 250, "sb"}func Test02() (a int, str string) { //方式2, 给返回值命名    a = 250    str = "sb"    return}func main() {    v1, v2 := Test01() //函数调用    _, v3 := Test02()  //函数调用, 第一个返回值丢弃    v4, _ := Test02()  //函数调用, 第二个返回值丢弃    fmt.Printf("v1 = %d, v2 = %s, v3 = %s, v4 = %d\n", v1, v2, v3, v4)}有参有返回值//求2个数的最小值和最大值func MinAndMax(num1 int, num2 int) (min int, max int) {    if num1 > num2 { //如果num1 大于 num2        min = num2        max = num1    } else {        max = num2        min = num1    }    return}func main() {    min, max := MinAndMax(33, 22)    fmt.Printf("min = %d, max = %d\n", min, max) //min = 22, max = 33}    
    波bobo  ·  2018-12-11
    166阅读  ·  0赞赏  ·   0问答
  • 区块链

    区块链是什么我想大家都已经知道了,所以就不再细说了毕竟点开这篇文章如果你都不知道区块链是什么的话,就没什么必要看了。那么我们就谈谈区块链的作用:1. 我们社会中,几乎所有的机制都是用的去中心化。2. 绝对去中心化当然不优于绝对的中心化,这就类似民主和集权的关系,中心和去中心的概念推广到社会体制就是集权和民主。3. 区块链并不直接带来绝对的去中心化,它是一个可以用来去中心化的工具。结合上面所说的,区块链就是一个工具,它和很多人描述的不一样,并不是一个创造无政府主义或者绝对自由和平等,只是一种去中心化的工具。 区块链是否是骗局,是不是有弊端? 不是骗局,但是有弊端。骗局层面主要是区块链有中心化和自治特点,会淡化监管影响(或监管层面触及不够),所以市场的逐利性和“看不见的手”,会将它应用和引入非法领域,暂时成为某些“黑灰产业”的庇护所。弊端有以下几点:1. 大家都能意识到的效率问题完全去中心化也不是没有弊端,其采用的分布式存储技术,由于是让每一个节点保存一份数据库,且网络中发生的任何一笔交易需要其它节点认证和记录,这导致区块链的系统工作效率十分之低。2. 共识机制业内并没有都达成共识基于其分布式账本策略,这代表着需要很多主体记账且需要他们达成共识,然后目前阶段,业界在共识协议层面都存在分歧,且一些主流机制也有着硬性缺点3. 效率和共识机制的平衡问题两者的平衡到今天为止都很难把控。4. 51%攻击问题虽然51%攻击针对较大型区块链项目威胁不大,因为受到实现成本太高等因素影响。5. 资源消耗的弊端由于区块链的运作较为依赖网络节点贡献的算力,这些算力主要用于解决SHA256 哈希和随机数搜索,除此之外并不产生任何实际社会价值。当然了,也许还有一些其他的弊端,我这里就罗列了几点,有别的欢迎大家来补充。
    路飞路飞  ·  2018-12-11
    193阅读  ·  2赞赏  ·   0问答
  • DAPP

      DAPP是什么当满足下所有条件的时候,一个应用才可以称为DAPP1. 必须是开源、自治并没有一个实体控制着大部分代币。2. 必须加密后储存在公开的区块链上。3. 必须拥有代币机制,矿工或者应用维护节点需要得到代币奖励。4. 应用代币的产生必须依据标准加密算法,有价值的节点亏根据算法获得相对应的代币。 比特币是一个DAPP,Asch是一个DAPP,而基于 Asch开发的【CCTIME】也是一个DAPP。不同的是,有些DAPP扮演了操作系统的角色,基于这些平台可以容易开发特定需求的DAPP。 DAPP核心要素1. 开发平台目前最流行的平台就是ETH,其是目前全球出了比特币之外的第二大区块链项目。应用的运行需要支付手续费,缺点其实就是要学习一个新的语言Solidity。2. 共识机制决定了运行DAPP的各节点如何达成共识及获取奖励,目前最常用的就是POW、POS和DPOS。3. 代币分发一般DAPP都会内置代币,让更多用户参与到DAPP的维护和学习中来,当然就考虑如何把代币分散到用户手里。 DAPP生命周期1. 撰写白皮书2. 分发代币3. 开发DAPP,逐步进化完善  
    说书人  ·  2018-12-11
    202阅读  ·  0赞赏  ·   0问答
  • 区块链中,软分叉硬分叉是什么。

      区块链中,软分叉硬分叉是什么。 软分叉是指在旧的节点上并不会感知到比特币区块发生的改变,也对新的节点创造的区块认可和接受,并且交易检验严格,老的交易格式范围大于新的交易格式,为何叫软分叉,因为一般这种分叉目的是杀死老链,使用新的规则,其实最终就是一条链。并且软分叉是向前兼容的。软分叉的新规则是以前旧规则的子集,所有在新版本认为合法的区块在旧版本下也是被认为合法。 硬分叉是指当比特币发生改变时,旧的节点为新的节点提供区块上的服务,不符合原规则的区块会被自动的忽视掉,矿工会按照原来的要求,在他们最后验证的区块之后创建新的区块。最著名的有BTC和BCH、ETC和ETH。 总结:软分叉向前兼容,旧的版本会接受新版本创建的新区块,在其中只要矿工升级到新版本旧可以,用户还是可以使用旧的协议,把可以在新版本下创建新的区块。硬分叉不向前兼容,旧版本不会接受新版本的区块,要切换到新版协议才可以。为什么硬分叉不需要51%以上的算力,因为即便旧链的长度大于新链也没用,新版本是不会接受旧链上的区块,如果所有用户都更新到新的版本那么客户的钱包会认为旧链上的资产是非法的,旧链上的货币无法使用。  
    皮皮皮卡丘  ·  2018-12-11
    224阅读  ·  2赞赏  ·   0问答