DOS-Network五月项目月报

各位亲爱的DOS社区的支持者们,欢迎阅读5月1日至5月30日的月度项目进度报告!???? 请关注我们的微信公众号或加入DOS官方社群,了解DOS网络的最新动态!现在就为大家带来最新的项目进展月报! ⚙️ 产品和开发DOS网络已经正式发布了公共测试网络 Beta 1.1版本 ????????????  任何能够使用Linux命令行环境的DOS网络支持者都可以加入DOS公共测试网络并且运行节点。请查看下方README文件并按照说明进行操作。 https://github.com/DOSNetwork... 如果您是开发者,请在下方链接中查看有关如何使用预言机服务的文档和示例。 https://dosnetwork.github.io/... Beta版本1.1目前包括以下功能: 1、可验证的密钥共享 2、分布式密钥生成(Pedersen的DKG方法) 3、Paring Library和阈值BLS签名 4、分布式随机数生成 5、Gossip和DHT协议的实现 6、P2P NAT支持 7、Json / Xml / Html请求解析器 8、容器化和客户端部署脚本 9、以太坊链上系统合约的整合 以下是未来发布版本的更多功能: 1、测试geth命令的lightnode模式并且在Parity客户端上进行试验 2、实现质押&授权合约及用户友好的面板 3、网络状态浏览器 ???? 最新战略合作DOS网络已与DUO Network达成战略合作。 双方将致力于通过抵押智能合约和分布式的数据预言机来降低传统衍生品交易中的风险和障碍,从而加速通证化加密衍生品的开发并促进Dapps的大规模应用。 ????活动DOS Network 联合创始人兼首席运营官王琦受邀参加哔哔News社区关于「以太坊生态」的线上论坛。 哔哔News社区致力于为用户提供有关区块链和数字货币的最新及有趣的信息和社区服务。王琦在此次论坛中表达了他对以太坊生态系统的见解。文章整理请戳:深聊以太坊 DOS网络运营和业务发展经理孙孝虎受邀参加了“解密Staking经济线下聚会”。 DOS网络公布了第一轮全球大使计划的结果。感谢所有参与者积极和支持。我们为 8 个不同的地方挑选了 10 位大使,并分别建立了各地的官方电报社区。我们的全球大使计划仍在进行,欢迎所有其他地区符合条件的DOS网络支持者申请!https://medium.com/dos-networ... DOS Network 正式入驻 Binance Info,并获得 Binance Info 官方“V”标识认证。 DOS网络联合创始人兼首席运营官王琦应邀参加了由巴比特主办的2019全球区块链(杭州)高峰论坛。并参与了主题为:"区块链项目融资新姿势”的大辩论。 DOS网络运营和业务发展经理孙孝虎应邀参与5月20日在北京举办的比特币之夜 - “A Gathering of Believers”。 DOS Network与Rebase社区和链茶馆于5月26日在北京联合举办了主题为”区块链跨链技术”的线下活动。本次活动特邀嘉宾Random Capital合伙人刘毅和Wanchain全球副总裁李尼做了主题分享,并与现场观众针对跨链展开深入讨论。DOS网络建立并开通电报官方公告频道。我们欢迎并鼓励每个DOS网络支持者加入这个频道,只需点击一下即刻了解我们的所有项目进展与更新。????每月统计数据推特粉丝:6344~6614(+ 4.3%)电报社区成员:15362~15798(+ 2.8%)Reddit成员:5034~5059(+ 0.5%)微信社区成员:2104~2779(+ 32.1%) - END - ...

June 10, 2019 · 1 min · jiezi

DOS-Network三月中四月项目月报

各位亲爱的DOS社区的支持者们,欢迎阅读3月20日至4月30日的月度项目进度报告!???? 请关注我们的微信公众号或加入DOS官方社群,了解DOS网络的最新动态,希望您喜欢!现在就为大家带来最新的项目进展月报! ⚙️ 产品和开发我们正在筹备即将发布的测试版。修复了节点cpu重载和内存不足的问题。从Kademlia DHT切换到Gossip SWIM进行网络路由,对p2p层进行了更多的模拟和测试。用Geth light节点代替full节点进行实验,进一步降低节点运行者的维护成本。为Docker和二进制部署开发了安装脚本。升级的系统合同,以支持Solidity 0.5.x。使用客户端看门狗watchdog和监护节点启动新一轮分布式随机生成,而不是空转和消耗gas。支持并行的预言机请求处理。实施监护人职能。 监护人就像MakerDao系统中的守护者一样,每个人都包括但不限于DOS客户端节点能够运行监护人脚本(待开发)并获得奖励。截至目前,监护人功能仅整合到客户端节点中。最终的引导过程和实现commit-reveal机制,用于安全地生成创世纪随机数。最简单的权益质押合约开发和测试网通证发行。系统合同gas优化和黑客攻击。Beta 1.0即将来临,敬请关注????????????! ????交易所列表,钱包和排名网站DOS通证目前在 4 个交易平台上有 8 个交易对,我们正在努力让DOS上更多主流的交易所。 BitMax 交易所: https://bitmax.io/#/trade/usd... https://bitmax.io/#/trade/btc... Bilaxy交易所: https://bilaxy.com/exchange#s... Coinsuper交易所: https://www.coinsuper.com/coi... https://www.coinsuper.com/coi... DDEX去中心化交易所: https://ddex.io/trade/DOS-WETH MXC交易所: https://www.mxc.com/trade.htm... https://www.mxc.com/trade.htm... DOS通证也可在Blockfolio,imToken、Trust Wallet和麦子钱包上查看和搜索: CoinMarketCap、CoinGecko和Binance Info现在也都在同步DOS Network项目信息和通证表现: DOS网络(DOS)价格,图表,市值和其他指标| CoinMarketCap https://coinmarketcap.com/cur... DOS网络(DOS)价格,市价,图表和基本面信息| CoinGecko https://www.coingecko.com/en/... DOS网络令牌(DOS)价格,评级,新闻和分析 -  Binance Info https://info.binance.com/en/c... 国内平台 MyToken、非小号、TokenClub、火星币优等也有同步DOS Network项目信息和通证表现。 ????新伙伴关系DOS Network已与QuarkChain达成战略合作伙伴关系。双方将为彼此提供更多用例,合作以满足全球商业标准,并促进分散应用的大规模采用。回顾:DOS与QuarkChain携手共进,为满足区块链全球化商业标准 DOS网络和原力协议正式建立了长期战略伙伴关系。双方将在分布式加密金融服务领域密切合作,实现更多区块链金融应用场景。回顾:DOS与原力协议齐心协力,拓展分布式加密金融领域 DOS网络已成为企业以太坊联盟(EEA)的成员,该联盟是全球最大的开源区块链组织,拥有300多家成员公司。我们很高兴加入欧洲经济区,为其使命做出贡献 - 增强基于以太坊的区块链技术的隐私性,安全性和可扩展性。回顾:DOS Network正式加入企业以太坊联盟(EEA) ???? 活动DOS网络成功地用BitMax进行了 1,000,000 DOS赏金计划。超过 5000 名用户参与了该计划,共有 397,326 个参赛作品。 DOS网络联合创始人兼运营负责人王琦,在Unitimes社区举办了AMA会议,该社区是全球领先的金融科技媒体平台。回顾:对话 DOS Network:我们不生产数据,我们只是数据的搬运工 | Unitimes AMA DOS网络提出了一种创新的令牌分发模型--DropBurn启动权益质押网络的新模型。我们希望分享和收集社区,感兴趣的开发人员,潜在的beta测试人员和节点运行者的反馈。 DOS Network的联合创始人华思远应邀参加芝加哥与BitMax,CTIA和Ankr Network的会面,讨论数字资产的现状和未来发展。华思远发表演讲,分享有关DropBurn的宝贵见解,并参与了一个小组讨论:区块链技术的转型角色。 ...

May 9, 2019 · 1 min · jiezi

聊聊scalecubecluster的GossipProtocol

序本文主要研究一下scalecube-cluster的GossipProtocol GossipProtocolscalecube-cluster-2.2.5/cluster/src/main/java/io/scalecube/cluster/gossip/GossipProtocol.java /** * Gossip Protocol component responsible for spreading information (gossips) over the cluster * members using infection-style dissemination algorithms. It provides reliable cross-cluster * broadcast. */public interface GossipProtocol { /** Starts running gossip protocol. After started it begins to receive and send gossip messages */ void start(); /** Stops running gossip protocol and releases occupied resources. */ void stop(); /** * Spreads given message between cluster members. * * @return future result with gossip id once gossip fully spread. */ Mono<String> spread(Message message); /** Listens for gossips from other cluster members. */ Flux<Message> listen();}GossipProtocol接口定义了start、stop、spread、listen方法GossipProtocolImplscalecube-cluster-2.2.5/cluster/src/main/java/io/scalecube/cluster/gossip/GossipProtocolImpl.java ...

May 6, 2019 · 4 min · jiezi

聊聊apache-gossip的ActiveGossiper

序本文主要研究一下apache gossip的ActiveGossiper AbstractActiveGossiperincubator-retired-gossip/gossip-base/src/main/java/org/apache/gossip/manager/AbstractActiveGossiper.java /** * The ActiveGossipThread sends information. Pick a random partner and send the membership list to that partner */public abstract class AbstractActiveGossiper { protected static final Logger LOGGER = Logger.getLogger(AbstractActiveGossiper.class); protected final GossipManager gossipManager; protected final GossipCore gossipCore; private final Histogram sharedDataHistogram; private final Histogram sendPerNodeDataHistogram; private final Histogram sendMembershipHistogram; private final Random random; private final GossipSettings gossipSettings; public AbstractActiveGossiper(GossipManager gossipManager, GossipCore gossipCore, MetricRegistry registry) { this.gossipManager = gossipManager; this.gossipCore = gossipCore; sharedDataHistogram = registry.histogram(name(AbstractActiveGossiper.class, "sharedDataHistogram-time")); sendPerNodeDataHistogram = registry.histogram(name(AbstractActiveGossiper.class, "sendPerNodeDataHistogram-time")); sendMembershipHistogram = registry.histogram(name(AbstractActiveGossiper.class, "sendMembershipHistogram-time")); random = new Random(); gossipSettings = gossipManager.getSettings(); } public void init() { } public void shutdown() { } public final void sendShutdownMessage(LocalMember me, LocalMember target){ if (target == null){ return; } ShutdownMessage m = new ShutdownMessage(); m.setNodeId(me.getId()); m.setShutdownAtNanos(gossipManager.getClock().nanoTime()); gossipCore.sendOneWay(m, target.getUri()); } //...... /** * Performs the sending of the membership list, after we have incremented our own heartbeat. */ protected void sendMembershipList(LocalMember me, LocalMember member) { if (member == null){ return; } long startTime = System.currentTimeMillis(); me.setHeartbeat(System.nanoTime()); UdpActiveGossipMessage message = new UdpActiveGossipMessage(); message.setUriFrom(gossipManager.getMyself().getUri().toASCIIString()); message.setUuid(UUID.randomUUID().toString()); message.getMembers().add(convert(me)); for (LocalMember other : gossipManager.getMembers().keySet()) { message.getMembers().add(convert(other)); } Response r = gossipCore.send(message, member.getUri()); if (r instanceof ActiveGossipOk){ //maybe count metrics here } else { LOGGER.debug("Message " + message + " generated response " + r); } sendMembershipHistogram.update(System.currentTimeMillis() - startTime); } protected final Member convert(LocalMember member){ Member gm = new Member(); gm.setCluster(member.getClusterName()); gm.setHeartbeat(member.getHeartbeat()); gm.setUri(member.getUri().toASCIIString()); gm.setId(member.getId()); gm.setProperties(member.getProperties()); return gm; } /** * * @param memberList * An immutable list * @return The chosen LocalGossipMember to gossip with. */ protected LocalMember selectPartner(List<LocalMember> memberList) { LocalMember member = null; if (memberList.size() > 0) { int randomNeighborIndex = random.nextInt(memberList.size()); member = memberList.get(randomNeighborIndex); } return member; }}AbstractActiveGossiper的构造器需要传入gossipManager及gossipCore;它定义了sendShutdownMessage、sendMembershipList、selectPartner等方法selectPartner方法在memberList不为空的情况下随机生成randomNeighborIndex选择出一个LocalMembersendMembershipList方法首先设置me的heartbeat,然后创建UdpActiveGossipMessage,该message的members首先是当前的localMember,然后再添加gossipManager.getMembers(),最后通过gossipCore.send发送给选中的memberActiveGossipMessageHandlerincubator-retired-gossip/gossip-base/src/main/java/org/apache/gossip/manager/handlers/ActiveGossipMessageHandler.java ...

May 4, 2019 · 10 min · jiezi

聊聊apache-gossip的FailureDetector

序本文主要研究一下apache gossip的FailureDetector FailureDetectorincubator-retired-gossip/gossip-base/src/main/java/org/apache/gossip/accrual/FailureDetector.java public class FailureDetector { public static final Logger LOGGER = Logger.getLogger(FailureDetector.class); private final DescriptiveStatistics descriptiveStatistics; private final long minimumSamples; private volatile long latestHeartbeatMs = -1; private final String distribution; public FailureDetector(long minimumSamples, int windowSize, String distribution) { descriptiveStatistics = new DescriptiveStatistics(windowSize); this.minimumSamples = minimumSamples; this.distribution = distribution; } /** * Updates the statistics based on the delta between the last * heartbeat and supplied time * * @param now the time of the heartbeat in milliseconds */ public synchronized void recordHeartbeat(long now) { if (now <= latestHeartbeatMs) { return; } if (latestHeartbeatMs != -1) { descriptiveStatistics.addValue(now - latestHeartbeatMs); } latestHeartbeatMs = now; } public synchronized Double computePhiMeasure(long now) { if (latestHeartbeatMs == -1 || descriptiveStatistics.getN() < minimumSamples) { return null; } long delta = now - latestHeartbeatMs; try { double probability; if (distribution.equals("normal")) { double standardDeviation = descriptiveStatistics.getStandardDeviation(); standardDeviation = standardDeviation < 0.1 ? 0.1 : standardDeviation; probability = new NormalDistributionImpl(descriptiveStatistics.getMean(), standardDeviation).cumulativeProbability(delta); } else { probability = new ExponentialDistributionImpl(descriptiveStatistics.getMean()).cumulativeProbability(delta); } final double eps = 1e-12; if (1 - probability < eps) { probability = 1.0; } return -1.0d * Math.log10(1.0d - probability); } catch (MathException | IllegalArgumentException e) { LOGGER.debug(e); return null; } }}FailureDetector的构造器接收三个参数,分别是minimumSamples, windowSize, distribution其中minimumSamples表示最少需要多少统计值的时候才真正计算phi值,windowSize表示统计窗口的大小,distribution表示使用哪种分布,normal表示NormalDistribution,其他表示ExponentialDistributionFailureDetector使用了apache commons math的DescriptiveStatistics来作为Heartbeat Interval的时间窗口统计;使用了NormalDistribution、ExponentialDistribution来完成正态分布、指数分布的累积分布probability,最后使用公式-1.0d * Math.log10(1.0d - probability)来计算phi值小结The Phi Accrual Failure Detector by Hayashibara et al论文提出了基于phi值的Accrual Failure Detector方法业界关于Failure Detector的实现大致有两种,一种是以akka为代表的按照论文基于NormalDistribution来计算;一种是以cassandra为代表的基于ExponentialDistribution来计算apache gossip的FailureDetector则集大成地同时支持了NormalDistribution及ExponentialDistribution两种实现方式docThe Phi Accrual Failure Detector by Hayashibara et alPhiAccrualFailureDetector.scala聊聊hazelcast的PhiAccrualFailureDetector聊聊Cassandra的FailureDetectorinconsistent implementation of 'cumulative distribution function' for Exponential Distribution

May 3, 2019 · 2 min · jiezi