建议和反馈

请填写你的反馈内容

  • 星月解惑:12.15比特币一步步探底,接下去价格会反转吗

    在投资道路上,不管你是新手还是老手,你都需要有自己的原则!一次投资就是一次经历,把握住你的每次成长,俗话说:“吾日三省吾身”,只有学会总结,培养自己的原则,不让自己迷失在投资的道路上,你才能走得更远,站的更高!一个好的老师能带你度过迷茫,找到该走的路,摸清方向,成功就在你转角之后!每一位在读这篇文章的人,感谢与你相遇!比特币日线图上可以看出,昨日的低点已经破了前日的低点,而昨日的高点未到达前日的阴线实体的三分之一,预示着比特币的极其弱势,按照这种走势结构形态,后面有可能会一根大阴线加速下杀!有些人可能看到昨日虽然向下破位,但是最低点也只打到了3178,距离前低3224只有46美金,他们据此认为比特币空头的力道有限,已经很难再跌了,于是在这个时候想去抄底做多,个人不同意这种观点,首先,当前价格距离布林线下轨还有200美金的空间,除非此时比特币多头疯狂涌入,收出长下影线或者十字星,否则的话,价格会去冲击布林线下轨,甚至向下大破位,打开下跌空间;其次,之前都是小阴线缓慢破位下杀,这种属于蓄力下跌走势,如果我们多复盘就能知道,这种走势后面往往至少会有一根大阴线。4小时图上可以看出,比特币是在今天凌晨0:00-4:00下破3224的支撑位的,之后在4:00-8:00价格继续下杀创出新低3178,随后收了上来收出一根十字星,十字星代表了价格的犹疑或反转,那么,接下去价格会反转吗?我觉得概率相对较小,首先,布林线当前属于缩口后的张口状态,预示着接下去可能会有一波大行情,而当前的行情幅度显然还太小,其次,多头的反抗力度太小,这个时候依然在底部震荡,而我们知道,在破位行情发生时,除非大阳线拉起才会反转,如果只是在底部震荡,预示着多头的反抗力道微弱,空头很快就会卷土重来的。随着行情的一步步探底,我们目前最需要的是保持耐心,毕竟下面到底还有多少可以下行的空间除了主力谁也不知道。错过收益总比死在黎明前要好的多。至少在出现明确的变盘信号前短期操作还是偏向看空的。反弹可轻仓空单入场。操作思路:逢高做空3340-3280附近可轻仓空单入场,目标3230 3180 31003020-3080附近可轻仓多单入场,目标3150 3200 3250真正的盈利来自于清醒,最大的浮亏来自于放肆。有人总是上涨的时候拿着低位的空,下跌的时候拿着高位的多,交易有得有失是正常现象,可是每一次总是不设止损,期待有个意外发生,还奢望着频繁被救活,这就好比被雷击的概率是一样的,别为自己造成的损失找太多的借口,老师建议每一次入场前想清楚,你的止损、目标位置在哪里,出现意外如何应对,出现获利何时走人,想清楚了再入场。大家来到这个市场第一目的就是赚钱,赚钱才是正道,其它都是空谈!严格执行风险控制措施,不仅仅只是停留在口头上,在实际的操作中不去执行,让风险自流,这种情况基本上往往就会出现爆仓,所以说在每一次下单之后,就要做好风险控制,不要被侥幸代替你的风险控制,有时候,选择了放弃,也是一种智慧,有些时候,选择不一定对,放弃不一定错,但是要坚持自己的交易原则的选择和放弃,在这个市场中,如果不懂的选择和放弃,明明是机会的情况下,选着了放弃,明明是风险,选择了参与,而你所有的选择和放弃都是在无序的情况下进行,那么怎么可能长久的在这个市场中站稳。建立出自己的一套模式,仅仅盘面上的技术指标就很多中,找出自己适合的一种方法,掌握其中的精髓,技术面的分析不要过于的复杂,找出适合自己的,用好它,用稳它,达到利润的累计效果,最终目的就是在投资的市场中获取利润,达到投资成功的目的。如果你刚刚入市,来找我,星月会教你边学习边操作;如果你已经身在其中并不理想,可以来找我、我帮助你,不会再让你一错再错;如果你已经在这个市场摸爬滚打却遍体鳞伤,不妨来找星月帮你重拾信心。文/星月解惑/(v,q同号2701841414)
    星月解惑  ·  2018-12-15
    2阅读  ·  0赞赏  ·   0问答
  • 星月解惑:聪明的人玩市场,比特币不忘初心方得始终

    你的选择多明智,决定你投资多自如,聪明的人玩市场,跟风的人博市场,亏损的理由成千上万,盈利的理由只需要一个,有人身穿龙袍欺骗了自己欺骗了一切,有人朴实无华却志存高远,善学者,假人之长以补其短,如果自己不懂投资理财,可以向专业人士学习。做这一行这么多年了,态度,永远是第一位,我觉得客户和资深分析师的差别不仅仅是专业技能的差别,最大的地方是态度,客户多半因为真金白银犹豫不决半信半疑的错过很多赚钱机会,反而会亏,我是一个心很软的人。做久了和客户成了朋友,有时候也很心疼他们的处境,做这个多半是想赚钱,能改善一下生活条件,听了他们的故事,真的是暗暗下决心一定要为他们多赚一点。不知道什么时候似乎有钱的人们多了。做投资的也就多,有利可图的地方,总不缺想来分一杯羹的人,越来越多的广告帖,说的也越来越专业,看似都出自名笔之下,但是又有多少吸引客户过去,是真的作为一个真正的资深分析师为客户去赚钱的呢?交易量手续费拿到手了,是的,但是,心里踏实么?有没有想过亏损的客户感受?谁的钱是大风刮来的么?都是辛辛苦苦的血汗钱,为什么你们可以这样的安然呢?我爱我的行业,每次听到有人说:“他们就是骗子,不可能赚钱,你去了就出不来了。”我是很心痛的,我真的不希望你们这些人污染了这个圈子。我不知道有多少人在和我一样的坚持着我们的初衷。为了资深分析师这个头衔没日没夜的拼着。我也希望能看到我这段话的广告专业户懂得,损人利己的事,不要做。我也希望看到我这段话的真真正正的投资人,能让我为你们做点什么。我不发那些可以ps的虚假截图。实实在在的,多赚少亏,只为每一个信任我的客户肯定我的一点一滴的。我发广告,是因为,我能从你们那里争来一个客户,他们也许就不会因为你们的欺骗而伤心了。看见我写的字就是缘分,投资也是多半看缘分,如果你相信缘分,相信我可以用心为你做点什么,你可以试着和我交流一下,希望有老师的朋友们也可以收藏我的联系方式,没有谁能陪你走到最后,也许哪一天你就需要我了呢?BTC今日行情分析点评比特币下跌的背离已经越来越严重,虽然币价切实的出现了下跌,但我们可以从多空双方的成交量看出,空头正在持续衰竭,量价背离正在逐步形成,这样的下跌无非是诱空的工具,如果你在这个位置还要选择卖币,那么你很有可能被一波强力多头甩下这趟超跌反弹的班车,并且最终出现反弹高位追涨再次被套的风险,所以现在我们要做的就是装死等待反弹,这个位置只要不再次出现放巨量创新低,后市就不会出现太大的下跌空间。现在行情还没有看出多头强力反击的动力,所以如果没抄底的,可以等待多头信号的持续出现再去右侧买入,毕竟市场现在的弱势现实依然存在,并且均线系统再次出现空头排列,因此探底的诱空不可避免,留着剩余仓位,下去继续干就是了。ETH价格在88和90上方出现小幅上行。ETH测试90的阻力位并面临强劲的卖盘兴趣。结果出现了下跌反应并相继突破了87和85的支撑位。收盘价也低于87和100小时简单移动平均线。下跌之后,ETH价格形成新低为82.99。但目前价格在85以上。最初的阻力位在上次下跌的50%斐波拉契回撤位(从90高点跌至83低点)附近。此外,在每小时价格图表上,有一条新连接的看跌趋势线,阻力位在89。中间的阻力位在上次下跌的61.8%斐波拉契回撤位(从90高点跌至83低点)。看起来在88至90之间有很密集的阻力位。因此,只要价格在90之下就有可能进一步下跌。ETH价格可能会突破83的支撑位。下一个关键的支撑位是80。低于80价格可能会加速滑向75。主要支撑位80,主要阻力位90。如果你刚刚入市,来找我,星月会教你边学习边操作;如果你已经身在其中并不理想,可以来找我、我帮助你,不会再让你一错再错;如果你已经在这个市场摸爬滚打却遍体鳞伤,不妨来找星月帮你重拾信心。文/星月解惑/(v,q同号2701841414)
    星月解惑  ·  2018-12-15
    2阅读  ·  0赞赏  ·   0问答
  • 君临说币:行情冥冥之中是不是早有定数?

    BTC午后行情分析:BTC隔夜一波加速回调行情走出后,价格再度探及3340这一前段时间的次低点支撑位置,虽然价格仍未能完成对于下方3340-3270强支撑区域的有效跌破,但是随着3400整数这一前两个交易日解盘中提及的第一区间下沿支撑破位后,当前BTC至少实现了对于本周一一波快速下跌以来持续收窄的第一区间边缘位置的初步突破,这对于该币种后市进一步展开空间实则提供了非常可观的“帮助”。即使破位行情尚未走成,但是在第一区间破位后,3270-3650这一短线进阶区间边缘到位的可能性有所提升,其中3270前期低点强支撑到位具体表现变的更值得关注。需要注意的是,隔夜这波下跌过程中市场的即时成交量虽然出现了一定程度的上升,但是从更长周期的角度来看市场活跃度仍处在一个相对低迷的状况,所以下方支撑区域的有效性仍然十分可观,因此在3270低点强支撑确认破位前并不建议在当前位置直接做空单抢入。更多行情资讯可以找V+:junlin68689交易跟进的大体思路与前几个交易日观点相仿,行情单边发力仍有待当前所处区间破位。随着3400第一支撑告破,如若早盘行情反抽探及该位置无法形成快速收复,激进者可以在该位置做轻仓空单提前布局,待价格进一步跌穿3270后再做进一步空单补入。稳健者耐心等待3270低点破位后再考虑空单追进。EOS午后行情分析:EOS凌晨时段同样走出了一波强度可观的快速下跌表现,不过由于该币种在此前一波反弹过程中表现比较抢眼,因此隔夜这波回调仅仅是把价格带回至1.69-2.00这一近期震荡所处的窄区间中轨附近,而截至发文时段EOS距离通道下轨强支撑仍存在比较明显的价格差,所以这波回调对于行情形成突破的帮助更为有限,目前EOS仍处在非常明确的区间震荡状况之中,相比于BTC来说短期交易价值偏低,所以短期内对于该币种的关注度可以适当减弱,1.69-2.19区间破位前整体交易价值偏低。君临寄语:在投资领域(尤其是币圈),知识的重要性决定个人财富的高度,只有掌握足够的知识才能有资格成为赢家,才能配得起高收益。选择永远比努力更重要,煤老板靠的不是能力,币圈大佬也不一定上过大学投资是一门艺术,并不仅仅是简单的买进卖出,这些只是结果,而我们最重要学习的地方在于如何达成这一结果,总而达到盈利的最终目的,在整个市场大多数人不懂技术的时候,只能一直靠自己不停的研究,虚心的从盘面去分析不同的主力控盘,然后拜K线为师,其实行情有时候就是很简单的东西,不忘初心,方得始终。很多事情真的很难去表达其中的意义,你总难猜透市场的变化,你看涨,但是主力可以先跌后涨,先涨后跌,但是结果是确定的,涨和跌是有一定的概率。而你去试图分析先跌后涨还是先涨后跌,只能被主力折腾的死去活来。况且,主力在市场面前也只不过是小人物,何必在乎太多太多。趋势也分为大趋势,小趋势,小趋势一般是主力控盘,大趋势来临的时候,主力就变成了小丑。所以做单的时候要做大趋势,谁也控不住,持有不动,直到利润来到。最后愿你在余生的投资圆满!不论是币圈,还是爱情,亦或者是其它!而我希望的是得到您的关注和支持!本文由君临说币独家编撰,转载请注明出处。投资有风险,入市需谨慎!
    君临说币  ·  2018-12-14
    2阅读  ·  0赞赏  ·   0问答
  • 【鉴轻尘】12.14低迷的市场状态,沉寂的币圈社区,到底代表什么?

    人,不怕迷茫,就怕没有迷茫感的停滞不前。人生不如意事十之二三,也许我们不能改变世界,却可以改变自己,让烦恼变成大海里的一滴水。明白不管怎样被生活对待,依然要许诺自己明日必有太阳。我认为,沉默是成长的标志,而成熟的标志,就是如何去沉默,不论如何,如果可以,愿带你越走越远。随着币链两圈的持续降温,经历了短暂热闹的区块链社群也很快进入冷却期。除了群主每天发发动态,几乎没有人聊天。如今的区块链群正在经历一个完整的生命周期,创建的时候热情高涨,第一次交流和互动,大家积极性都很高;等活动结束了,广告开始出现了,有些人开始使用“屏蔽”功能;最后,这个群,基本上就死掉了。而现在熊市寒冷加剧,很多区块链社群似乎连群主也消失无踪了。不管是项目群、资讯群还是媒体群,群员人数都比热闹的时候大减,原来500人大群有的现在已剩下90多人。群里的广告党们也更加肆无忌惮,内容除了与币圈相关的各种糖果、token项目广告,还出现了支付宝领红包或者微商宣传等。如今的区块链社群如同荒废的矿场,裁员潮席卷的币圈,整个区块链社群也弥漫着死气沉沉的氛围,仿佛它从来都没有火爆过。偶尔的聊天内容似乎也与区块链无关,高喊“all in”的徐小平已从各大区块链社群退出,曾因区块链聚集到一起的人如今已渐行渐远… …BTC午后行情分析:BTC隔夜一波加速回调行情走出后,价格再度探及3340这一前段时间的次低点支撑位置,虽然价格仍未能完成对于下方3340-3270强支撑区域的有效跌破,但是随着3400整数这一前两个交易日解盘中提及的第一区间下沿支撑破位后,当前BTC至少实现了对于本周一一波快速下跌以来持续收窄的第一区间边缘位置的初步突破,这对于该币种后市进一步展开空间实则提供了非常可观的“帮助”。即使破位行情尚未走成,但是在第一区间破位后,3270-3650这一短线进阶区间边缘到位的可能性有所提升,其中3270前期低点强支撑到位具体表现变的更值得关注。需要注意的是,隔夜这波下跌过程中市场的即时成交量虽然出现了一定程度的上升,但是从更长周期的角度来看市场活跃度仍处在一个相对低迷的状况,所以下方支撑区域的有效性仍然十分可观,因此在3270低点强支撑确认破位前并不建议在当前位置直接做空单抢入。更多行情资讯可以找yuanls1979交易跟进的大体思路与前几个交易日观点相仿,行情单边发力仍有待当前所处区间破位。随着3400第一支撑告破,如若早盘行情反抽探及该位置无法形成快速收复,激进者可以在该位置做轻仓空单提前布局,待价格进一步跌穿3270后再做进一步空单补入。稳健者耐心等待3270低点破位后再考虑空单追进。EOS午后行情分析:EOS凌晨时段同样走出了一波强度可观的快速下跌表现,不过由于该币种在此前一波反弹过程中表现比较抢眼,因此隔夜这波回调仅仅是把价格带回至1.69-2.00这一近期震荡所处的窄区间中轨附近,而截至发文时段EOS距离通道下轨强支撑仍存在比较明显的价格差,所以这波回调对于行情形成突破的帮助更为有限,目前EOS仍处在非常明确的区间震荡状况之中,相比于BTC来说短期交易价值偏低,所以短期内对于该币种的关注度可以适当减弱,1.69-2.19区间破位前整体交易价值偏低。更多行情资讯可以找yuanls1979寄语:投资不是一朝一夕,所以不可操之过急。就算你现在亏损了,那也没什么可怕的,只要选择正确,失去的都会再回来。把握做单时机,掌握行情动向,方可百战百胜。投资的过程是一个逐渐成长的过程,对风险认知的加深是一个投资人不断成熟的标志。而当一个投资人对风险有了正确的认知,又能以正确的心态去执行,很好的去规避风险,就是一个成功的投资人
    鉴轻尘  ·  2018-12-14
    2阅读  ·  0赞赏  ·   0问答
  • 智能合约部署及调用

    以太坊区块链技术2.0版本对于行业应用的开发最主要特性就是实现了智能合约,本质上讲智能合约是由事件驱动的、具有状态的、运行在一个复制的、分享的账本之上的、且能够保管账本上资产的程序。它是一个可以被信任,总是按照事先的规则执行的操作。但与此同时,智能合约部署完之后无法修改也会带来其他问题,这是另一个议题。下面直接上干货。本篇内容是基于go客户端通过命令行完成智能合约的编写、发布、调用。可参考的项目地址:http://www.ethdocs.org/en/latest/contracts-and-transactions/contracts.html 1、安装solidity智能合约开发语言  [plain]  view plain  copybrew tap ethereum/ethereum  brew install solidity  which solc  2、打开命令行,进入之前创建的私链,并设置日志输出文件 [plain]  view plain  copyjwter-WIFI:csdnBlog jwter$ geth --datadir "privateChain" console 2>> log_output  Welcome to the Geth JavaScript console!    instance: Geth/v1.4.18-stable-c72f5459/darwin/go1.7.3  coinbase: 0x56a957bbde2b2dcb6321c9aceb11c21d6dfe68f9  at block: 164 (Sat, 03 Dec 2016 16:29:24 CST)   datadir: privateChain   modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0      >   3、设置编译环境[plain]  view plain  copy> web3.eth.getCompilers()  ["Solidity"]  > admin.setSolc("/usr/local/bin/solc")  "solc, the solidity compiler commandline interface\nVersion: 0.4.2+commit.af6afb04.Darwin.appleclang  \n\npath: /usr/local/bin/solc"  4、编写智能合约并编译 [plain]  view plain  copy> contractSource  = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"  "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"  > contract = eth.compile.solidity(contractSource).test  {    code: "0x606060405260308060106000396000f3606060405260e060020a6000350463c6888fa18114601c575b6002565b3  46002576007600435026060908152602090f3",    info: {      abiDefinition: [{          constant: false,          inputs: [...],          name: "multiply",          outputs: [...],          payable: false,          type: "function"      }],      compilerOptions: "--bin --abi --userdoc --devdoc --add-std --optimize -o /var/folders/c6/  1vhz7hcd7w9g883rwrn4vzvr0000gn/T/solc271136546",      compilerVersion: "0.4.2",      developerDoc: {        methods: {}      },      language: "Solidity",      languageVersion: "0.4.2",      source: "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }",      userDoc: {        methods: {}      }    }  }  单源编译器输出会给出你合约对象,每个都代表一个单独的合约。eth.compile.solidity 的实际返还值是合约名字到合约对象的映射。由于合约名字是test,eth.compile.solidity(source).test会给出包含下列领域的测试合约对:Code 编译的以太坊虚拟机字节代码Info 从编译器输出的额外元数据Source 源代码Language 合约语言 (Solidity,Serpent,LLL)LanguageVersion 合约语言版本compilerVersion 用于编译这个合约的solidity编译器版本。abiDefinition 应用的二进制界面定义userDoc 用户的NatSpec Doc。developerDoc 开发者的NatSpec Doc。编译器输出的直接结构化(到code和info)反映了两种非常不同的部署路径。编译的以太坊虚拟机代码和一个合约创建交易被发送到区块,剩下的(info)在理想状态下会存活在去中心化云上,公开验证的元数据则执行区块链上的代码。如果你的源包含多个合约,输出会包括每个合约一个入口,对应的合约信息对象可以用作为属性名称的合约名字检索到。你可以通过检测当前的GlobalRegistrar代码来试一下: contracts = eth.compile.solidity(globalRegistrarSrc)5、定义智能合约abi并编译[plain]  view plain  copy> abi = [{constant:false , inputs:{name:'a',type:'uint256'}}]  [{      constant: false,      inputs: {        name: "a",        type: "uint256"      }  }]  > myabi = eth.contract(abi)  6、部署前准备:解锁账户、监控日志文件 [plain]  view plain  copy> accountAddress = eth.accounts[0]  "0x56a957bbde2b2dcb6321c9aceb11c21d6dfe68f9"  > personal.unlockAccount(accountAddress)  Unlock account 0x56a957bbde2b2dcb6321c9aceb11c21d6dfe68f9  Passphrase:   true  >  监控日志文件需新开窗口,执行以下命令。用于查看部署完的智能合约是否被同步到区块链网路中 [plain]  view plain  copyjwter-WIFI:csdnBlog jwter$ tail -f log_output  7、部署智能合约 [plain]  view plain  copy> myContract = myabi.new({from:accountAddress,data:contract.code})  {    abi: [{        constant: false,        inputs: {          name: "a",          type: "uint256"        }    }],    address: undefined,    transactionHash: "0xf330f4affd3989d72a979410e3a53f3a4d2d4d832faaa6c1bb32f72998acbd4b"  }  8、查看部署状态,并同步到区块链中智能合约必须开始挖矿模式才是被同步到区块链中 可根据监控日志窗口可以看到交易是否执行,来决定何时执行miner.stop() [plain]  view plain  copy> txpool.status  {    pending: 1,    queued: 0  }  > miner.start()  true  > miner.stop()  true  > txpool.status  {    pending: 0,    queued: 0  }  9、调用智能合约 [plain]  view plain  copy> contractABI = eth.contract(contract.info.abiDefinition)  >   > testContract = contractABI.at(myContract.address)  {    abi: [{        constant: false,        inputs: [{...}],        name: "multiply",        outputs: [{...}],        payable: false,        type: "function"    }],    address: "0xcb0895d4b3b35b2a45a31fab853614c14e7759a4",    transactionHash: null,    allEvents: function(),    multiply: function()  }  > testContract.multiply.call(3)  21  注意:记得保存智能合约部署完的地址,以及abi参数,因为部署完之后无法修改,忘记地址则无法再次调用,同时部署智能合约会消耗gas,完成后可观察用户的余额是否变化。 
    cola欧巴  ·  2018-12-14
    92阅读  ·  0赞赏  ·   0问答
  • 智能合约调用示例

     故事是这样的,有5个小伙伴,他们为 黄豆芽, 黑豆芽,绿豆芽 中的哪种最好吃发生了分歧,于是它们准备发起一个投票。但是大家都希望投票的过程是完全去中心化的…最后他们决定使用区块链智能合约来解决这个问题准备工作启动geth(为了更快的打包,建议dev模式),新建5个账户,并把defaultAccount(如果没有设置一般为eth.accounts[0]) 解锁,保证defaultAccount账户里面有一定的资产把合约部署(合约代码戳这里)上去,楼主这里使用的是 truffle部署合约,其它的方式也是可以的;另外,部署合约的时候,需要给构造器传一个数组参数,楼主这里给的是 var proposalNames = ['huangDY', 'lvDY', 'heiDY']; 即3个候选选项root@ubuntu:~/contract/ballot# truffle migrateRunning migration: 1_initial_migration.js Deploying Ballot... Ballot: 0x6b2ddc515fc610690e34dfbd4915698b75add647Saving successful migration to network...Saving artifacts...上述 Ballot 后面那串即合约存储地址开始调用此处要展示的是一个投票的全过程合建合约实例var ballotInstance = eth.contract(abi).at(addr);addr 和 abi是分别赋值为合约存储地址 和 合约abi的变量。此过程不是一个交易,所以无需继续挖矿验证合约实例是否正确["0x6875616e67445900000000000000000000000000000000000000000000000000", 0]> web3.toUtf8('0x6875616e67445900000000000000000000000000000000000000000000000000')"huangDY"可以看到合约已经部署上去了,实例也已成功。如果把参数换为 1、2可以分别得到另外两个候选项分配投票权这里先给 eth.account[1] 分配投票权> ballotInstance.giveRightToVote.sendTransaction(eth.accounts[1], "xiaoA", {from:eth.accounts[0], gas:4700000});I1226 21:08:07.308936 internal/ethapi/api.go:1047] Tx(0xe7fa31e646f6aefe804f3fc4bf3563a05993c58609270210590f62a5f5b03703) to: 0x6b2ddc515fc610690e34dfbd4915698b75add647"0xe7fa31e646f6aefe804f3fc4bf3563a05993c58609270210590f62a5f5b03703"注意,这里如果是第一次调用使用合约方法一定要加gas参数 否则会调用失败。可以看到这是一个新的交易,继续挖矿,让矿工打包…验证一下,投票权是否已经分配成功> ballotInstance.voters(eth.accounts[1])["0x7869616f41000000000000000000000000000000000000000000000000000000", false, 0, 1482757798, 0]> web3.toUtf8('0x7869616f41000000000000000000000000000000000000000000000000000000');"xiaoA"如上,eth.accounts[1] 已经分配了投票权。继续,给其它4个账户也分配权限,分配完之后查看一下> ballotInstance.votersNum()5开始投票此步骤需要保证参与投票的账户都有资产,否则调用合约方法的时候会失败。这里先用 eth.accounts[0] 给1号绿豆芽(序号是从0开始的)投票> ballotInstance.vote.sendTransaction(1, {from:eth.accounts[0], gas:4700000})I1226 21:24:02.752948 internal/ethapi/api.go:1047] Tx(0xddb8efc2083b32fca5bdf99877408638fb1fa2ba95be221473653e234ca0b6a5) to: 0x6b2ddc515fc610690e34dfbd4915698b75add647"0xddb8efc2083b32fca5bdf99877408638fb1fa2ba95be221473653e234ca0b6a5"继续挖矿,待打包后查看下投票是否成功> ballotInstance.winningProposalIndex()1> ballotInstance.winnerName()"0x6c76445900000000000000000000000000000000000000000000000000000000"> web3.toUtf8('0x6c76445900000000000000000000000000000000000000000000000000000000');"lvDY"可以看到,票数最多的是lvDY, 其它默认是0票。可以继续再用其它的账户进行投票,并查看最终的投票结果 
      ·  2018-12-14
    104阅读  ·  2赞赏  ·   0问答
  • 构建智能合约

    使用命令行构建智能合约此页面将帮助您在以太坊命令行上构建Hello,World合约。如果您不知道如何使用命令行,我们建议您跳过本教程,而是使用图形用户界面构建自定义标记。智能合约是以太坊区块链上的账户持有对象。它们包含代码功能,可以与其他合同进行交互,制定决策,存储数据并将乙醚发送给他人。合同是由他们的创造者定义的,但是他们的执行,以及他们提供的服务,都是由以太网本身提供的。只要整个网络存在,它们就会存在并且可执行,并且只有在程序被自毁时才会消失。你能用合同做什么?那么,你几乎可以做任何事情,但是对于我们的入门指南,我们来做一些简单的事情:首先你会创建一个经典的“Hello World”合约,然后你可以建立自己的加密标记发送给任何你喜欢的人。一旦你掌握了这一点,那么你将通过众筹筹集资金,如果成功的话,将提供一个完全透明和民主的组织,只会服从自己的公民,永远不会摆脱它的宪法,不能被审查或关闭。而所有这些都在不到300行的代码中。在你开始之前:安装以太坊CLI详细了解合约进入geth控制台之前,请确认GUI已关闭。运行geth以开始同步过程(第一次运行可能需要一段时间)。那我们现在就开始吧。你的第一个公民:欢迎你现在你已经掌握了以太坊的基本知识,让我们进入你的第一个严肃的合同。前沿是一个很大的开放领土,有时候你可能会感到孤独,所以我们的第一步就是创造一个自动伴侣,在你感到孤独时迎接你。我们会称他为“温和”。Greeter是一个智能数字化实体,它存在于区块链中,并能够根据其输入与任何与之交互的人进行对话。它可能不是一个讲话者,但它是一个很好的倾听者。这是它的代码:contract Mortal { /* Define variable owner of the type address */ address owner; /* This function is executed at initialization and sets the owner of the contract */ function Mortal() { owner = msg.sender; } /* Function to recover the funds on the contract */ function kill() { if (msg.sender == owner) selfdestruct(owner); } } contract Greeter is Mortal { /* Define variable greeting of the type string */ string greeting; /* This runs when the contract is executed */ function Greeter(string _greeting) public { greeting = _greeting; } /* Main function */ function greet() constant returns (string) { return greeting; } } 你会注意到这个代码中有两个不同的合约:“凡人”和“迎宾”。这是因为Solidity(我们使用的高级合同语言)具有继承性,这意味着一个合约可以继承另一个合约的特征。这对简化编码非常有用,因为合约的通用特征不需要每次重写,并且所有合约都可以用更小,更易读的块编写。所以通过只声明迎宾者是致命的,你就继承了来自“凡人”合约的所有特征,并使迎宾代码简单易读。继承特征的“凡人”仅仅意味着迎宾合同可以被其所有者杀死,以清理区块链并在不再需要合同时收回锁定在其中的资金。以太坊中的契约默认为不朽,并且没有所有者,这意味着一旦部署,作者就没有特殊的特权了。部署前请考虑这一点。使用Solc编译器编译您的合同在您能够部署您的合同之前,您需要两件事情:编译后的代码应用程序二进制接口,它是一个定义如何与合约进行交互的JavaScript对象你可以通过使用Solidity编译器来获得这两者。如果你还没有安装编译器,你可以:按照安装Solidity Compiler的说明在机器上安装编译器使用Remix,一个基于网络的Solidity IDESOLC在您的机器上=======如果您在机器上安装了编译器,则需要编译合约以获取编译的代码和应用程序二进制接口。solc -o target --bin --abi Greeter.sol 这将创建两个文件,一个文件包含已编译的代码,另一个文件在名为target的目录中创建应用程序二进制接口。$tree . ├── Greeter.sol └── target ├── Greeter.abi ├── Greeter.bin ├── Mortal.abi └── Mortal.bin 你会看到有为两个合同创建的文件; 但是由于Greeter包括Mortal,你不需要部署Mortal来部署Greeter。您可以使用这两个文件来创建和部署合同。var greeterFactory = eth.contract(<contents of the file Greeter.abi>) var greeterCompiled = "0x" + "<contents of the file Greeter.bin>" 你现在编译了你的代码,并将它提供给Geth。现在您需要准备好进行部署,这包括设置一些变量,例如您希望使用的问候语。将下面的第一行编辑为比“Hello World!”更有趣的内容 并执行这些命令:var _greeting = "Hello World!" var greeter = greeterFactory.new(_greeting,{from:eth.accounts[0],data:greeterCompiled,gas:47000000}, function(e, contract){ if(e) { console.error(e); // If something goes wrong, at least we'll know. return; } if(!contract.address) { console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined..."); } else { console.log("Contract mined! Address: " + contract.address); console.log(contract); } }) 使用混音如果你没有安装Solc,你可以简单地使用在线IDE。将源代码(位于本页顶部)复制到Remix,它应该自动编译您的代码。您可以放心地忽略右侧任何黄色警告框。要访问已编译的代码,请确保已greeter选择右侧窗格中的下拉菜单。然后直接点击下拉菜单右边的详细信息按钮。在弹出窗口中,向下滚动并复制WEB3DEPLOY文本框中的所有代码。在您的计算机上创建一个临时文本文件并粘贴该代码。确保将第一行更改为如下所示:var _greeting = "Hello World!" 现在您可以将结果文本粘贴到您的geth窗口中,或者使用导入文件。等待30秒钟,你会看到这样的消息:loadScript("yourFilename.js")Contract mined! address: 0xdaa24d02bad7e9d6a80106db164bad9399a0423e 您可能必须使用您在开始时选择的密码来“解锁”发送交易的帐户,因为您需要支付部署合同的天然气成本:例如,personal.unlockAccount(web3.eth.accounts[0], "yourPassword")该合同估计需要约18万个气体部署(根据在线固体编译器),在撰写本文时,测试网上的气体价格为20 gwei(等于(20000000000 wei,或0.00000002 ether)每单位有很多有用的统计数据,包括网络统计页面上的最新天然气价格。请注意,这些费用不会支付给以太坊开发人员,而是发给矿工,那些计算机正在努力寻找新块并保证网络安全的同行。天然气价格由当前计算供需市场决定。如果天然气价格太高,你可以成为矿工并降低你的要价。在不到一分钟的时间内,你应该有一个合同地址的日志,这意味着你已经成功地部署了你的合同。您可以使用以下命令来验证已部署的代码(将被编译):eth.getCode(greeter.address) 如果它返回“0x”以外的任何内容,那么恭喜!你的小家伙活着!如果再次创建合同(通过执行另一个eth.sendTransaction),它将发布到新地址。运行Greeter为了打电话给你的机器人,只需在终端上输入以下命令:greeter.greet(); 由于此通知在区块链上没有任何变化,因此它会立即返回并且无需任何燃气费用。你应该看到它返回你的问候语:'Hello World!' 让其他人与您的代码进行交互为了让其他人来执行你的合同,他们需要两件事情:在Address那里合同所在该ABI(应用程序二进制接口),这是一种用户手册中描述的合同的函数的名称以及如何将它们召唤到你的JavaScript控制台要获取Address,请运行以下命令:greeter.address; 要获取ABI,请运行以下命令:greeterCompiled.greeter.info.abiDefinition; 提示:如果您使用Remix编译代码,则上面的最后一行代码不适合您!相反,您需要ABI直接从Remix中复制,与复制WEB3DEPLOY编译代码的方式类似。在右侧窗格中,单击详细信息按钮并向下滚动到ABI文本框。点击复制按钮复制整个ABI,然后将其粘贴到临时文本文档中。然后,您可以实例化一个可用于在连接到网络的任何计算机上调用合约的JavaScript对象。在以下行中,替换ABI(数组)和Address(一个字符串)以在JavaScript中创建一个契约对象:var greeter = eth.contract(ABI).at(Address); 这个特殊的例子可以通过简单地调用来实例化:var greeter2 = eth.contract([{constant:false,inputs:[],name:'kill',outputs:[],type:'function'},{constant:true,inputs:[],name:'greet',outputs:[{name:'',type:'string'}],type:'function'},{inputs:[{name:'_greeting',type:'string'}],type:'constructor'}]).at('greeterAddress'); 当然,greeterAddress必须用合同的唯一地址来代替。自己清理后:你必须非常高兴才能签下第一份合同,但当业主继续写下更多的合同时,这种激动有时会消失,导致在区块链上看到放弃合同的不愉快景象。未来,区块链租金可能会实施以增加区块链的可扩展性,但现在,成为一个好公民并且人道地放弃您的废弃机器人。交易将需要发送到网络,并在下面的代码运行后支付区块链所做更改的费用。自毁是由网络补贴的,所以它的成本比平常的交易要低得多。greeter.kill.sendTransaction({from:eth.accounts[0]}) 这只能由合同所有者发送的交易触发。您可以验证该行为是否完成,只需看看它是否返回0即可:eth.getCode(greeter.address) 请注意,每个合同都必须执行自己的kill子句。在这种特殊情况下,只有创建合同的账户才能杀死它。如果你不添加任何杀人条款,它可能永远独立于你和任何地球上的边界而永远活着,所以在你开始生活之前,请检查你的当地法律对此的看法,包括对技术出口的任何可能限制,言论限制以及有关数字众生公民权利的任何立法。人道地对待你的机器人。 
    王某人  ·  2018-12-14
    123阅读  ·  0赞赏  ·   0问答
  • 公钥和私钥解释

    这些密码学的概念容易被搞混淆,的确也情有可原。因为公钥、私钥、加密、认证这些都是较为复杂的问题,其概念不太容易理解,理解不透就容易产生各种似是而非的概念,为了让大家对于密码学有进一步的了解,这里我就详细解说一下公钥和私钥的具体作用和使用方法。  加密和认证  首先我们需要区分加密和认证这两个基本概念。  加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。  公钥和私钥  其次我们还要了解公钥和私钥的概念和作用。  在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。  公钥私钥的原则:00001. 一个公钥对应一个私钥。00002. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。00003. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。00004. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。  非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。  基于公开密钥的加密过程  比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:00001. Bob将他的公开密钥传送给Alice。00002. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。00003. Bob用他的私人密钥解密Alice的消息。  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。  基于公开密钥的认证过程  身份认证和加密就不同了,主要用户鉴别用户的真伪。这里我们只要能够鉴别一个用户的私钥是正确的,就可以鉴别这个用户的真伪。  还是Alice和Bob这两个用户,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用公钥密码学对文件签名发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。整个身份认证的过程如下:00001. Alice用她的私人密钥对文件加密,从而对文件签名。00002. Alice将签名的文件传送给Bob。00003. Bob用Alice的公钥解密文件,从而验证签名。  上面的过程可以用下图表示,Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。  总结  好了,上面就详细讲述了加密、认证、公钥、私钥这四个概念,明白这些概念后,你就应该对“网站的安全登录认证设计”一文所讲述的概念有了更清晰的了解了。
    bears  ·  2018-12-14
    149阅读  ·  2赞赏  ·   0问答
  • Solidity语言

     Solidity是以太坊智能合约的编程语言,我自己也是学习了很久,感觉是有些难度,所以需要去认真的去了解并理解,今天所讲的有基础也有深入的分析,阅读之前,需要对以太坊、智能合约进行初步或者深入的了解。 结构体Solidity提供struct来定义自定义类型,自定义的类型是引用类型。 我们看看下面的例子:pragma solidity ^0.4.11; contract CrowdFunding {    // 定义一个包含两个成员的新类型    struct Funder {        address addr;        uint amount;    }     struct Campaign {        address beneficiary;        uint fundingGoal;        uint numFunders;        uint amount;        mapping (uint => Funder) funders;    }    uint numCampaigns;    mapping (uint => Campaign) campaigns;    function newCampaign(address beneficiary, uint goal) public returns (uint campaignID) {        campaignID = numCampaigns++; // campaignID 作为一个变量返回        // 创建一个结构体实例,存储在storage ,放入mapping里        campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0);    }     function contribute(uint campaignID) public payable {        Campaign storage c = campaigns[campaignID];        // 用mapping对应项创建一个结构体引用        // 也可以用 Funder(msg.sender, msg.value) 来初始化.        c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value});        c.amount += msg.value;    }     function checkGoalReached(uint campaignID) public returns (bool reached) {        Campaign storage c = campaigns[campaignID];        if (c.amount < c.fundingGoal)            return false;        uint amount = c.amount;        c.amount = 0;        c.beneficiary.transfer(amount);        return true;    }}上面是简单版的众筹合约,但可以让我们去理解structs基础概念,其可以用映射和数组中作为元素。其本身也包括映射和数组等类型。不能声明一个struct同时将自生作为成员,这个限制是基于 结构体大小必须是有限的。但struct可以作为mapping的值类型成员。注意在函数中,将一个struct赋值给一个局部变量,实际是拷贝的引用,所以修改局部变量值的同时,会影响到原变量。当然,也可以直接通过访问成员修改值,而不用一定赋值给一个局部变量,如campaigns[campaignID].amount = 0 映射 映射类型,一种键值对的映射关系存储结构。定义方式为mapping(_KeyType => _KeyValue)。键类型允许除映射、变长数组、合约、枚举、结构体外的几乎所有类型。值类型没有任何限制,可以为任何类型包括映射类型。映射可以被视作为一个哈希表,所有可能的键会被虚拟化的创建,映射到一个类型的默认值。在映射表中,并不存储键的数据,仅仅存储它的keccak256哈希值,这个哈希值在查找值时需要用到。 映射是没有长度的,也没有键集合或值集合的概念。映射类型,仅能用来作为状态变量,或在内部函数中作为storage类型的引用。可以通过将映射标记为public,来让Solidity创建一个访问器。通过提供一个键值做为参数来访问它,将返回对应的值。 映射的值类型也可以是映射,使用访问器访问时,要提供这个映射值所对应的键,不断重复这个过程。 来看一个例子:pragma solidity ^0.4.0; contract MappingExample {    mapping(address => uint) public balances;     function update(uint newBalance) public {        balances[msg.sender] = newBalance;    }} contract MappingUser {    function f() public returns (uint) {        MappingExample m = new MappingExample();        m.update(100);        return m.balances(this);    }}注意: 映射并未提供迭代输出的方法,可以自行实现一个这样的数据结构。  好了,今天就先写这么多,自己在写的时候都出了些小问题,毕竟不是特别的熟练,都可以算是学了没多久,凑凑活活的写了出来,有不对的希望大家留言指出,多交流。 
    樱花YING  ·  2018-12-13
    223阅读  ·  0赞赏  ·   0问答
  • 区块链中的共识算法

    共识算法是通过特殊节点的投票,在短时间内完成对交易的确认,如果利益不相干的若干个节点达成共识,我们就认定全网对此也能达成一致。 公式算法的分类工作量证明:生成要加入到区块链中的一笔新的交易是必须满足的要求,基于工作量证明机构构建的区块链网络中。节点是通过计算机的哈希散列数值争取记账权,求得正确的数值。权益证明机制:在2012年化名Sunny King推出了Peercoin,该加密电子货币采用工作量证明机制发行新币,采用权益证明机制维护网络安全,这就是权益证明机制在加密电子货币的首次应用。股份授权证明机制:股份授权证明机制是一种新的保障网络安全的共识机制。它在尝试解决传统的PoW机制和PoS机制问题的同时,还能通过实施科技式的民主抵消中心化所带来的负面效应。PooI验证池Pool验证池基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。Pool验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。不过,Pool验证池也存在一些不足,例如该共识机制能够实现的分布式程度不如PoW机制等 所以就以上这也可以分析出其特点有:安全性,扩展性,性能效率,资源消耗这四个方面。 
      ·  2018-12-13
    246阅读  ·  2赞赏  ·   0问答