Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | core: Remove max block interval (#287) | Jimmy Hu | 2018-11-02 | 17 | -84/+41 |
| | |||||
* | Rename repo to dexon-consensus | Wei-Ning Huang | 2018-11-02 | 114 | -847/+847 |
| | |||||
* | core: Fix various locking issues (#285) | Jimmy Hu | 2018-11-02 | 3 | -24/+40 |
| | |||||
* | core: Total Ordering syncer (#277) | Jimmy Hu | 2018-11-01 | 2 | -0/+485 |
| | | | | | | | | | | | | | | | | * Add simple processFinalizedBlock logic * processBlock * Bootstrap mode * Sort before flush * Add syncer test * Clean more data for memory * Add comments. Fix some stuffs. | ||||
* | core: core.Lattice supports config change (#276) | Mission Liao | 2018-11-01 | 12 | -156/+499 |
| | | | | | | | | | | | Besides making core.Lattice supports config change, This PR also include the first test for below scenario: - Configuration changes are registered before test running - Those changes are carried/broadcasted as payload of blocks - Only one node would initiate these changes, however, all nodes would finally receive/apply those changes to their own test.Governance instance. | ||||
* | core: fix possible fork vote (#283) | Jimmy Hu | 2018-11-01 | 2 | -15/+19 |
| | |||||
* | Add pprof to dexcon commands (#282) | Mission Liao | 2018-11-01 | 2 | -4/+12 |
| | |||||
* | core: Add PullVotes to Network. (#281) | Jimmy Hu | 2018-10-31 | 8 | -71/+69 |
| | |||||
* | core: Add a repeat vote state. (#280) | Jimmy Hu | 2018-10-31 | 3 | -12/+105 |
| | |||||
* | core: fix NotifyRoundHeight is not called when processing blocks | Mission Liao | 2018-10-31 | 1 | -10/+16 |
| | | | - also add missing logs when calling Application.BlockDelivered. | ||||
* | misc: Change bls stuffs for docker build (#278) | Jimmy Hu | 2018-10-31 | 1 | -2/+2 |
| | |||||
* | core: fix lattice bugs (#274) | Mission Liao | 2018-10-30 | 3 | -5/+38 |
| | | | | | | | | | | | | | | | | | * Fix bug: the block pool is not resized. * Fix forward acking. * Fix panic when total ordering * Fix total ordering flush hang The blocks arrived first might be not delivered before other block. Therefore, if some last block of previous round arrived before last blocks in other chains, and are not delivered when entering flush mode. Their corresponding flush-ready flag won't be turned on. * Fix bug in core.latticeData Invalid chainID is not thrown when preparing blocks. | ||||
* | test: integrate state to gov (#275) | Mission Liao | 2018-10-30 | 3 | -9/+113 |
| | | | | | | * Fix dummy error * Check validity before apply state changes. * Add RegisterConfigChange method to test.Governance * Add SwitchToRemoteMode method to test.State | ||||
* | core: Create an interface for TSigVerifierCache (#273) | Jimmy Hu | 2018-10-30 | 1 | -7/+24 |
| | |||||
* | core: fix consensus timestamp (#272) | Mission Liao | 2018-10-29 | 1 | -2/+12 |
| | | | | | | | | | | | * Fix panic Assume DAG would be increased to 7 chains at round 4. When encounter the first block from round 4, this module would attempt to resize its working set to the numChains in round 2 or 3. * Add a check to make sure consensus timestamps are increasing * Fix consensus timestamp rewind | ||||
* | core: Add BlockSkeleton and Verify functions (#271) | Jimmy Hu | 2018-10-29 | 6 | -3/+75 |
| | |||||
* | core: Fix goroutine leaks (#270) | Jimmy Hu | 2018-10-29 | 2 | -1/+8 |
| | |||||
* | core: Do not process vote/block in agreement if it has stopped (#269) | Jimmy Hu | 2018-10-29 | 1 | -4/+18 |
| | |||||
* | test: Handle blocks that should retry sanity check later. (#267) | Mission Liao | 2018-10-27 | 2 | -14/+36 |
| | |||||
* | core: Fix missing fields when cloning blocks. (#268) | Mission Liao | 2018-10-27 | 2 | -4/+33 |
| | |||||
* | core: Remove atomic (#266) | Jimmy Hu | 2018-10-27 | 2 | -14/+11 |
| | |||||
* | core: Unit test for BA sync (#265) | Jimmy Hu | 2018-10-26 | 2 | -0/+86 |
| | |||||
* | core: sync BA (#264) | Jimmy Hu | 2018-10-26 | 3 | -19/+72 |
| | |||||
* | test: clone types.Config, test.Governance, test.State (#262) | Mission Liao | 2018-10-26 | 6 | -42/+608 |
| | |||||
* | core: Pull block (#263) | Jimmy Hu | 2018-10-26 | 7 | -32/+141 |
| | |||||
* | core: Leader selector will retry sanityCheck (#261) | Jimmy Hu | 2018-10-26 | 8 | -27/+118 |
| | |||||
* | misc: Increase CircleCI no output time to 15 min (#260) | Jimmy Hu | 2018-10-26 | 1 | -0/+1 |
| | |||||
* | core: Lock entire lattice.ProcessBlock (#259) | Jimmy Hu | 2018-10-26 | 2 | -2/+7 |
| | | | | | | * Lock entire ProcessBlock * Lock Consensus.processBlock | ||||
* | misc: Add longer timeout for test in master (#258) | Jimmy Hu | 2018-10-25 | 2 | -8/+14 |
| | |||||
* | core: lattice sync (#257) | Jimmy Hu | 2018-10-25 | 12 | -119/+507 |
| | |||||
* | core: handle round 0 randomness in processFinalizedBlock (#256) | Jimmy Hu | 2018-10-25 | 2 | -12/+26 |
| | |||||
* | test: add test.Stopper to stop by round (#255) | Mission Liao | 2018-10-25 | 2 | -32/+162 |
| | |||||
* | core: Move dkg in types to types/dkg. (#253) | Jimmy Hu | 2018-10-25 | 19 | -278/+297 |
| | |||||
* | core: fix stuffs (#250) | Mission Liao | 2018-10-24 | 9 | -52/+33 |
| | | | | | | | | * fix discontinuous finalization height * remove types.Block.Witness.Timestamp field * add field: types.Block.Finalization.ParentHash * fix log format of CRS * switch round and chain in log of types.Position. | ||||
* | test: Fix datarace in test (#251) | Jimmy Hu | 2018-10-24 | 1 | -6/+12 |
| | |||||
* | test: add test.State (#239) | Mission Liao | 2018-10-24 | 11 | -154/+1019 |
| | | | | | | | | | * separate test utility and interface implementation for test.Governance. * add test.State. * integrate test.State to test.Governance. test.State is mainly used to emulate state propagation on fullnode. | ||||
* | core: disable nonblocking temporarily (#249) | Mission Liao | 2018-10-24 | 2 | -10/+5 |
| | |||||
* | core: reduce calls to Application.VerifyBlock (#247) | Mission Liao | 2018-10-24 | 5 | -29/+25 |
| | | | | | | * remove sanity check when adding blocks. * call VerifyBlock after lattice's sanity check. * remove checkRelation flag. | ||||
* | core: fix panic when proposed block is nil (#248) | Mission Liao | 2018-10-24 | 1 | -0/+4 |
| | |||||
* | core: Change interface of Application.VerifyBlock (#246) | Jimmy Hu | 2018-10-23 | 7 | -10/+25 |
| | | | | * Change interface of Application.VerifyBlock | ||||
* | Change BLS to dexon-foundation (#245) | Jimmy Hu | 2018-10-23 | 7 | -19/+18 |
| | |||||
* | core: notify fullnode to snapshot configs when round change. (#243) | Mission Liao | 2018-10-23 | 1 | -8/+19 |
| | |||||
* | core: add equality checker for dkg related structure (#237) | Mission Liao | 2018-10-23 | 4 | -26/+379 |
| | | | | | | | | | Besides adding equality, also renaming those fields. - PublicKeyShares.shares -> shareCaches - PublicKeyShares.shareIndex -> shareCacheIndex - rlpPublicKeyShares.Shares -> ShareCaches - rlpPublicKeyShares.ShareIndexK -> ShareCacheIndexK - rlpPublicKeyShares.ShareIndexV -> ShareCahceIndexV | ||||
* | core: add round parameter to ProposeCRS method (#244) | Wei-Ning Huang | 2018-10-23 | 5 | -5/+12 |
| | | | | | | | | Since all DKG set members may ProposeCRS, but only one will get through, we need to be able to tell which round the CRS is intended for in order to skip CRS submission of the same round. Also this commit add check to make sure we have enough master public key when initializing DKGGroupPublicKey. | ||||
* | simulation: Cache network broadcasted message (#242) | Jimmy Hu | 2018-10-23 | 2 | -20/+41 |
| | |||||
* | core: Change dkg timing (#241) | Jimmy Hu | 2018-10-23 | 1 | -12/+17 |
| | | | | | * Register DKG after CRS is proposed * Change round at only one place | ||||
* | core: remove duplicate BroadcastRandomnessResult call (#240) | Wei-Ning Huang | 2018-10-23 | 1 | -6/+1 |
| | |||||
* | core: prepare empty block if null block is confirmed by BA. (#231) | Jimmy Hu | 2018-10-23 | 7 | -23/+136 |
| | |||||
* | core: fix uninitialized variable in configuration chain (#238) | Wei-Ning Huang | 2018-10-22 | 2 | -1/+2 |
| | |||||
* | core: Handling self proposed DKG private share (#236) | Jimmy Hu | 2018-10-22 | 3 | -27/+34 |
| | |||||
* | core: total-ordering: add test TestRunFromNonGenesis (#226) | Haoping Ku | 2018-10-22 | 3 | -22/+96 |
| | | | | * core: total-ordering: add test TestRunFromNonGenesis | ||||
* | crypto: dkg: implement rlp.Encoder, rlp.Decoder for PrivateKey (#235) | Sonic | 2018-10-20 | 2 | -0/+26 |
| | |||||
* | core: fix logging for SendDKGPrivateShare (#234) | Wei-Ning Huang | 2018-10-20 | 1 | -1/+2 |
| | |||||
* | Start Run() until dMoment. (#233) | Jimmy Hu | 2018-10-20 | 1 | -0/+2 |
| | |||||
* | core: types: implement rlp.Encoder and rlp.Decoder (#232) | Sonic | 2018-10-20 | 6 | -7/+379 |
| | | | | | * core: types: implement rlp.Encoder and rlp.Decoder * crypto: dkg: fix PublicKey.Bytes | ||||
* | core: initial commit for logger (#228) | Mission Liao | 2018-10-19 | 12 | -52/+280 |
| | | | | | | | | | | | | | * Replace "log.*" with logger. * Add simple logger to log with log package. * Add debug logs to all calls to these interfaces: - core.Application - core.Governance - core.Network * Add Stringer to these types: - types.DKGComplaint - types.AgreementResult - types.DKGMasterPublicKey - types.DKGFinalize | ||||
* | misc: Fix simulation error (#230) | Jimmy Hu | 2018-10-19 | 6 | -24/+78 |
| | |||||
* | core: Sync from BA and test. (#224) | Jimmy Hu | 2018-10-19 | 2 | -64/+199 |
| | |||||
* | core: total-ordering: change early flag to mode (#227) | Haoping Ku | 2018-10-19 | 10 | -49/+64 |
| | | | * core: total-ordering: change early flag to mode | ||||
* | crypto: ecdsa: make NodeID match dexon address (#229) | Sonic | 2018-10-19 | 3 | -51/+35 |
| | | | | | | | * Remove publicKey struct * PublicKey.Bytes() return uncompressed public key to match the address format of dexon (Keccak256(pubBytes[1:])[12:], where pubBytes is 65 bytes uncompressed public key.). * Rename ethcrypto to dexCrypto | ||||
* | core: Append all config till Initial block (#225) | Jimmy Hu | 2018-10-18 | 1 | -0/+7 |
| | |||||
* | core: types: implements UnmarshalJSON from DKGMasterPublicKey (#223) | Wei-Ning Huang | 2018-10-18 | 1 | -0/+8 |
| | |||||
* | core: total ordering flush (#212) | Mission Liao | 2018-10-18 | 9 | -229/+737 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Implement flush * Panic for all errors from total-ordering * Fix test failure All DAGs generated by blocks-generator would trigger round switching. * Add NewBlocksGeneratorConfig * Add test caes for numChains changes * Resize internal structures * Perform total ordering based on current numChains * Fix not a valid DAG checking * Comparing blocks by height is not correct * Fix blocks from future round are delivered first by revealer * Make sure only picking one candidate in one chain. Blocks on the same chain in different rounds would not have acking relation. * Fix stuffs * Fix the issue that two candidates from the same chain are picked. * Rework candidateChainMapping * Add test case for phi, k changed * Refine testing code for round change * Add breakpoints in global vector * Remove not a valid dag checking. * Adding comments * Add check to forward acking * Fix vet failure * Prepareing height record with breakpoint * Fixup: add check to make sure delivered round IDs are increasing. | ||||
* | core: sync compaction chain (#222) | Jimmy Hu | 2018-10-18 | 6 | -27/+391 |
| | |||||
* | core: consensus-timestamp: add sync (#219) | Haoping Ku | 2018-10-18 | 3 | -29/+118 |
| | | | | | | | | | | | | | | * core: consensus-timestamp: add sync * core: consensus-timestamp: add config change * fix go comment * add config change test * fixup: add error case handling * fixup: round interleave | ||||
* | core: Add init block to Run() (#221) | Jimmy Hu | 2018-10-18 | 6 | -14/+24 |
| | |||||
* | core: Some sync functions (#220) | Jimmy Hu | 2018-10-17 | 7 | -27/+107 |
| | |||||
* | core: Rebroadcast agreement and randomness result. (#218) | Jimmy Hu | 2018-10-17 | 3 | -30/+49 |
| | |||||
* | core: genesis consensus timestamp (#217) | Mission Liao | 2018-10-17 | 6 | -30/+48 |
| | | | | | | | | | | * Refine the initial value for empty time slot. * Fix DATA RACE netowrkConnection is reset for each test, however, our Consensus instance is not stopped after one test is finished, they might continue use network interface for a while. | ||||
* | core: Add stop function to all components (#216) | Jimmy Hu | 2018-10-17 | 5 | -28/+79 |
| | |||||
* | Finalization Height starts from 1 (#215) | Jimmy Hu | 2018-10-16 | 2 | -0/+7 |
| | |||||
* | core: consensus-timestamp: modify for round change (#214) | Haoping Ku | 2018-10-16 | 1 | -4/+12 |
| | | | | | | * core: consensus-timestamp: modify for round change * core: consensus-timestamp: fix typos | ||||
* | core: New dexon ba (#210) | Jimmy Hu | 2018-10-16 | 8 | -479/+405 |
| | |||||
* | core: Fix corner cases (#211) | Jimmy Hu | 2018-10-16 | 4 | -2/+8 |
| | | | | | | * leader selector will choose smaller hash if distance to crs is the same * Set initial value of aID in BA before start | ||||
* | core: set genesis block finalization timestamp to zero time (#213) | Wei-Ning Huang | 2018-10-16 | 1 | -0/+2 |
| | |||||
* | core: Change First round dkg timing (#209) | Jimmy Hu | 2018-10-16 | 2 | -4/+6 |
| | |||||
* | core: fix block confirmed is not called when Debug is not implemented. (#208) | Mission Liao | 2018-10-16 | 2 | -3/+54 |
| | |||||
* | core: Change threshold (#205) | Jimmy Hu | 2018-10-15 | 1 | -1/+1 |
| | |||||
* | core: fix timestamp marshaling (#207) | Wei-Ning Huang | 2018-10-15 | 2 | -3/+3 |
| | |||||
* | Remove duplicated dMoment in Consensus.Run (#206) | Jimmy Hu | 2018-10-15 | 2 | -3/+5 |
| | |||||
* | core: Add NodeSetCacheInterface (#203) | Jimmy Hu | 2018-10-15 | 2 | -31/+42 |
| | |||||
* | core: Change DKG threshold (#204) | Jimmy Hu | 2018-10-15 | 3 | -6/+6 |
| | |||||
* | core: Fix simulation errors. (#202) | Jimmy Hu | 2018-10-15 | 4 | -35/+36 |
| | |||||
* | core: fix simulation error (#201) | Jimmy Hu | 2018-10-15 | 5 | -12/+29 |
| | | | | | * Sync dMoment for all consensus core * App check for randomness ignore round 0 | ||||
* | test_config: sync default config (#200) | Wei-Ning Huang | 2018-10-15 | 2 | -2/+4 |
| | |||||
* | misc: Use prebuild bls docker image. (#199) | Jimmy Hu | 2018-10-15 | 2 | -5/+18 |
| | |||||
* | core: No randomness for round 0 (#198) | Jimmy Hu | 2018-10-15 | 3 | -1/+45 |
| | | | | | * No randomness for round 0 * Ignore round 0 randomness | ||||
* | core: check if flush is required when round switching in total-ordering (#197) | Mission Liao | 2018-10-15 | 6 | -220/+304 |
| | |||||
* | core: blocks generation supports rounds (#196) | Mission Liao | 2018-10-14 | 6 | -219/+445 |
| | | | | | | | * Block proposing based on timestamp, instead of count of blocks generated. * Add method to find tips of each round in blockdb. * Block proposing based on tips of last round found on blockdb. | ||||
* | core: crypto: ecdsa: add method to create PrivateKey from ecdsa.PrivateKey ↵ | Wei-Ning Huang | 2018-10-13 | 1 | -0/+9 |
| | | | | (#195) | ||||
* | core: modify interface (#194) | Mission Liao | 2018-10-12 | 9 | -20/+38 |
| | | | | * Add a new method to notify full node about round cutting. * Modify interface to return error when preparing block | ||||
* | core: latticeData supports config change (#190) | Mission Liao | 2018-10-12 | 14 | -597/+802 |
| | | | | | | | | | | | | | | | * Add test for num of chains changes. * Return error in latticeData.prepareBlock * Compare two positions * Modify chainStatus from height-based to index-based. * Fix consensus to use round variable * Remove sanity check in chainStatus * Fixup: refine sanity check - verify if round switching is required or not by chainTip's config. - make the logic in sanity check more clear - pospone acking relationship checking, they are more expensive to check. | ||||
* | core: change interface (#193) | Mission Liao | 2018-10-11 | 19 | -92/+110 |
| | | | | | | | * Extract types.FinalizationResult * Change interface: - Application.BlockConfirmed returns whole block. - Application.BlockDelivered returns partial result. | ||||
* | core: Move BlockConfirmed to Application interface (#192) | Mission Liao | 2018-10-11 | 3 | -5/+5 |
| | | | | | | | | When a block is confirmed, all its txs are permitted to be executed. Therefore, exporting this method provides more and earlier information about txs to be executed, and helps application layer to process txs more efficiently. | ||||
* | core: types: fix nodeID generation (#191) | Wei-Ning Huang | 2018-10-11 | 4 | -6/+10 |
| | | | | | Use ethereum style nodeID generation (keccak on compressed public key without the first byte). | ||||
* | simulation: Fix docker build fail (#188) | Jimmy Hu | 2018-10-09 | 3 | -3/+9 |
| | |||||
* | Merge pull request #187 from dexon-foundation/w-bytes | Sonic | 2018-10-09 | 1 | -0/+5 |
|\ | | | | | common: add Bytes() method to Hash | ||||
| * | Merge branch 'master' into w-bytes | Wei-Ning Huang | 2018-10-09 | 12 | -39/+74 |
| |\ | |/ |/| | |||||
* | | Fix typo in crypto (#186) | Jimmy Hu | 2018-10-09 | 2 | -2/+16 |
| | | |||||
* | | core: Add round to DKG methods in gov. Change network interface name (#185) | Jimmy Hu | 2018-10-09 | 10 | -37/+58 |
| | | |||||
| * | common: add Bytes() method to Hash | Wei-Ning Huang | 2018-10-09 | 1 | -0/+5 |
|/ | |||||
* | core: Add DKG final message. (#181) | Jimmy Hu | 2018-10-09 | 14 | -2/+175 |
| | |||||
* | core: update config variable name grammar and remove configuration (#184) | Wei-Ning Huang | 2018-10-08 | 8 | -64/+26 |
| | |||||
* | core: Fix timestamp (#182) | Jimmy Hu | 2018-10-08 | 2 | -5/+1 |
| | |||||
* | core: Remove round from gov.ProposeCRS (#183) | Jimmy Hu | 2018-10-08 | 5 | -18/+31 |
| | |||||
* | core: Check PrivateShare in DKGComplaint (#180) | Jimmy Hu | 2018-10-08 | 2 | -25/+75 |
| | |||||
* | core: Add block randomness in compaction-chain module (#179) | Jimmy Hu | 2018-10-08 | 6 | -32/+153 |
| | |||||
* | core: Block randomness generation. (#178) | Jimmy Hu | 2018-10-08 | 4 | -7/+73 |
| | |||||
* | core: General tsig (#177) | Jimmy Hu | 2018-10-05 | 14 | -73/+287 |
| | |||||
* | core: Add NotarySet and DKGSet to cache (#176) | Jimmy Hu | 2018-10-05 | 3 | -27/+94 |
| | |||||
* | types: Test block clone (#175) | Jimmy Hu | 2018-10-05 | 2 | -0/+73 |
| | |||||
* | core: find block in db (#174) | Mission Liao | 2018-10-05 | 7 | -79/+199 |
| | | | | | | | | | | | | | | | | | | | | * Make sure block pool is large enough It's safe to use a larger blockPool when the number of chains is smaller. * Construct latticeData via config. * Seek acked blocks in blockdb when unable to find them in memory cache. In previous implementation, we assume our cache in memory is enough to perform DAG's sanity check. However, it's no longer true when the number of chains might be changed between rounds. * Simplify purge. Remove the relation to purge block by chainStatus. | ||||
* | core: Use event to run DKG and CRS in Consensus. (#171) | Jimmy Hu | 2018-10-04 | 4 | -53/+71 |
| | |||||
* | core: Check sorted ack in sanity check (#173) | Jimmy Hu | 2018-10-04 | 4 | -1/+44 |
| | |||||
* | core: split lattice-data to another file (#172) | Mission Liao | 2018-10-04 | 4 | -1058/+1069 |
| | | | | | - Split latticeData to another file - Remove areAllAcksInLattice | ||||
* | core: Check Witness height. Add ConsensusTime and ConsensusHeight to block. ↵ | Jimmy Hu | 2018-10-04 | 16 | -61/+159 |
| | | | | (#170) | ||||
* | common: Add an Event module (#169) | Jimmy Hu | 2018-10-04 | 2 | -0/+175 |
| | |||||
* | test: Short test applied to some long running tests (#168) | Jimmy Hu | 2018-10-04 | 3 | -3/+16 |
| | |||||
* | core: remove NumWitnessSet in governance config (#167) | Wei-Ning Huang | 2018-10-03 | 3 | -9/+3 |
| | | | | NumWitnessSet is no longer required as we don't have witness set in the design anymore. | ||||
* | core: export some crypto verification function (#166) | Wei-Ning Huang | 2018-10-03 | 3 | -7/+9 |
| | | | | | verifyDKGMasterPublicKeySignature and verifyDKGComplaintSignature are needed in the governance contract to verify the signature. Export than so fullnode can use it. | ||||
* | core: publish round based config (#165) | Mission Liao | 2018-10-03 | 11 | -33/+147 |
| | |||||
* | CurcleCI: Run full test on master (#164) | Jimmy Hu | 2018-10-03 | 2 | -1/+16 |
| | |||||
* | core: Add unit test for DKG CRS in consensus (#163) | Jimmy Hu | 2018-10-03 | 3 | -4/+120 |
| | |||||
* | core: Prevent duplicated nack complaint (#162) | Jimmy Hu | 2018-10-03 | 2 | -1/+14 |
| | |||||
* | core: remove shard (#161) | Mission Liao | 2018-10-02 | 7 | -683/+620 |
| | |||||
* | core: Export DKGGroupPublicKey and its verify function (#160) | Jimmy Hu | 2018-10-02 | 3 | -18/+21 |
| | |||||
* | core: replace reliable-broadcast with shard (#159) | Mission Liao | 2018-10-02 | 16 | -1458/+264 |
| | |||||
* | core: remove ProposeThresholdSignature/GetThresholdSignature (#158) | Wei-Ning Huang | 2018-10-02 | 4 | -48/+5 |
| | | | Also rename the argument name of ProposeCRS. | ||||
* | core: run DKG and CRS at background. (#155) | Jimmy Hu | 2018-10-02 | 15 | -57/+142 |
| | |||||
* | core: update data model to reflect new model (#157) | Wei-Ning Huang | 2018-10-01 | 23 | -611/+51 |
| | | | | | | Update data model: 1) Remove witness ack. 2) Add round to block. 3) Update governance interface. | ||||
* | core: check block timestamp (#156) | Jimmy Hu | 2018-10-01 | 3 | -29/+73 |
| | |||||
* | test: Non-qualified node are accepted in test. (#154) | Jimmy Hu | 2018-10-01 | 4 | -12/+25 |
| | |||||
* | core: use notarySet for BA module. (#153) | Jimmy Hu | 2018-10-01 | 8 | -82/+117 |
| | |||||
* | core: integrate authenticator (#150) | Mission Liao | 2018-09-30 | 12 | -192/+153 |
| | |||||
* | test: tcp handshake (#151) | Jimmy Hu | 2018-09-30 | 1 | -49/+175 |
| | |||||
* | core: Allow more time for DKG to finish on CircleCI machine. (#152) | Jimmy Hu | 2018-09-29 | 1 | -1/+1 |
| | |||||
* | core: remove legacy mode (#149) | Mission Liao | 2018-09-28 | 8 | -77/+48 |
| | |||||
* | core: Add sizes of various nodeSets (#148) | Jimmy Hu | 2018-09-28 | 5 | -24/+81 |
| | |||||
* | core: hide types.NodeID from full node. (#147) | Mission Liao | 2018-09-28 | 21 | -251/+544 |
| | | | | | | | | | * Refine core.Governance interface - Remove types.NodeID from interface declaration. - All parameter should be round based. * Add core.NodeSetCache * Agreement accepts map of nodeID directly. * test.Transport.Peers method return public keys. | ||||
* | types: NodeSet and Selector (#146) | Jimmy Hu | 2018-09-27 | 2 | -0/+203 |
| | |||||
* | core: update governance interface and config (#145) | Wei-Ning Huang | 2018-09-27 | 9 | -57/+61 |
| | | | | | | 1) Remove RoundHeight from config. 2) NotarySet is not from governance contract, we get Node set intead. Notary set is caculated from the NodeSet using CRS. 3) CRS is not in the governance interface. | ||||
* | core: rename crypto/eth to crypto/ecdsa (#144) | Wei-Ning Huang | 2018-09-26 | 14 | -41/+41 |
| | |||||
* | core: use dexon-foundation/dexon instead of ethereum/go-ethereum (#143) | Wei-Ning Huang | 2018-09-26 | 5 | -23/+23 |
| | |||||
* | Fix racing (#142) | Jimmy Hu | 2018-09-26 | 1 | -3/+6 |
| | |||||
* | crypto: sigtopub to crypto package. remove SigToPubFn (#141) | Jimmy Hu | 2018-09-26 | 29 | -138/+152 |
| | |||||
* | core: move crypto to core/crypto (#140) | Mission Liao | 2018-09-26 | 42 | -135/+112 |
| | | | | | | | | | - Move key-holder to authenticator Make core.keyHolder public as core.Authenticator, it is not required to make this part an interface. - Make private when there is no need to go public. - Fix data race | ||||
* | Fix race (#138) | Jimmy Hu | 2018-09-26 | 1 | -1/+16 |
| | |||||
* | core: configuration chain test (#137) | Jimmy Hu | 2018-09-26 | 5 | -9/+226 |
| | |||||
* | core: run TSIG for first configuration block at startup (#135) | Jimmy Hu | 2018-09-26 | 15 | -70/+473 |
| | |||||
* | core: update governance interface to consider genesis state (#136) | Wei-Ning Huang | 2018-09-25 | 17 | -94/+123 |
| | |||||
* | Fix naming of methods (#134) | Mission Liao | 2018-09-25 | 11 | -83/+83 |
| | | | | | | - BlockDeliver -> BlockDelivered - TotalOrderingDeliver -> TotalOrderingDelivered - WitnessAckDeliver -> WitnessAckDelivered - VerifyPayload -> VerifyPayloads | ||||
* | core: add debug (#133) | Mission Liao | 2018-09-25 | 13 | -239/+190 |
| | | | | | | | | | | | | | | | | | | | | | * Split interface * Rename nonblocking-application to nonblocking Parts needs nonblocking gets more. * Implement core.nonBlocking based on interface split * Fix: the witness parent hash could be parent on compaction chain. * Rename Application.DeliverBlock to BlockDeliver To sync with naming of other methods. * Change methods' fingerprint - BlockConfirmed provides block hash only. - BlockDeliver provde a whole block. | ||||
* | Use static linking for libbls (#132) | Wei-Ning Huang | 2018-09-25 | 4 | -47/+3 |
| | |||||
* | core: add key holder (#130) | Mission Liao | 2018-09-25 | 3 | -0/+220 |
| | | | | | The purpose to add this module is to export the functionality to sign/verify data without exporting private key directly. | ||||
* | core: Fix random test failure (#131) | Jimmy Hu | 2018-09-25 | 1 | -1/+1 |
| | |||||
* | core: run first DKG at startup. (#129) | Jimmy Hu | 2018-09-23 | 20 | -69/+377 |
| | |||||
* | env.sh: set LD_LIBRARY_PATH and DYLD_LIBRARY_PATH | Wei-Ning Huang | 2018-09-21 | 1 | -0/+4 |
| | |||||
* | bin: patches: update patch due to upstream changes (#128) | Wei-Ning Huang | 2018-09-21 | 1 | -9/+10 |
| | |||||
* | core: add shard (#127) | Mission Liao | 2018-09-21 | 8 | -107/+504 |
| | | | | | | | A shard is basically DEXON v1 components, except the strongly acked part, including: - maintaining lattice structure - total ordering - generate consensus timestamp | ||||
* | dep: update dependencies | Wei-Ning Huang | 2018-09-21 | 1 | -40/+5 |
| | |||||
* | test: fix block generator (#126) | Mission Liao | 2018-09-21 | 6 | -76/+99 |
| | | | | | | | | * Generate correct hash/signature when generating blocks. * Refine naming, types. - type of chainNum should be uint32 by default - rename blockCount to blockNum - rename nodeCount to chainNum | ||||
* | core: add anti-complaint and nack-complaint to dkg protocol (#123) | Jimmy Hu | 2018-09-21 | 4 | -35/+282 |
| | |||||
* | core: refactor witness data processing flow (#124) | Wei-Ning Huang | 2018-09-20 | 10 | -33/+133 |
| | | | | | | | | | | | Since witness data need to include data from application after it processed a block (e.g. stateRoot). We should make the process of witness data asynchronous. An interface `BlockProcessedChan()` is added to the application interface to return a channel for notifying the consensus core when a block is processed. The notification object includes a byte slice (witenss data) which will be include in the final witness data object. | ||||
* | core: add blockpool (#121) | Mission Liao | 2018-09-20 | 5 | -22/+190 |
| | | | | | | core.blockPool is used to cache blocks arrived out-of-order. Our consensus should retry those blocks after their acking blocks added to lattice. | ||||
* | test_config: update config to latest runnable version (#122) | Wei-Ning Huang | 2018-09-20 | 2 | -7/+15 |
| | |||||
* | core: add blocklattice (#117) | Mission Liao | 2018-09-20 | 2 | -0/+992 |
| | | | | | | | | | | | | | blocklattice is used to replace reliable broadcast. Aiming to fix these problems: - The mechanism related to strong ack is no longer required. - The sanity-check of one block would be passed even if its acking block doesn't exist. This commit doesn't include logic to handle out-of-order blocks. It should be done in another PR. | ||||
* | Rename validator* to node* (#120) | Mission Liao | 2018-09-20 | 63 | -1151/+1154 |
| | |||||
* | core: Add dkg test (#119) | Jimmy Hu | 2018-09-19 | 3 | -0/+210 |
| | |||||
* | core: rename Notary (Acks) to Witness (#118) | Wei-Ning Huang | 2018-09-19 | 19 | -230/+230 |
| | |||||
* | core: Nack Complaint (#116) | Jimmy Hu | 2018-09-19 | 2 | -11/+83 |
| | |||||
* | core:DKG and TSIG protocol (#115) | Jimmy Hu | 2018-09-19 | 10 | -29/+791 |
| | |||||
* | core: refine governance interface to reduce Get* methods (#114) | Wei-Ning Huang | 2018-09-18 | 9 | -153/+116 |
| | | | | | Since we have a bunch of static configurations in the governance contract, instead of using a Get* method for each of them, we instead implement a GetConfiguration() method to return a structure of the configurations. | ||||
* | bin: allow non-root homebrew install to work (#113) | Wei-Ning Huang | 2018-09-18 | 3 | -0/+41 |
| | | | | | | | | In order for non-root homebrew install to work, we need to setup some custom CFLAGS and LDFLAGS variables, we also need to patch the mcl library so we are able to build. A PR is sent to the mcl upstream, the local patch will be removed once the upstream PR is merged. | ||||
* | core: remove ticker parameter from NewConsensus | Mission Liao | 2018-09-18 | 10 | -53/+113 |
| | | | | | | | | | - remove BlockProposingInterval, it's replaced by lambda. - remove ticker parameter of NewConsensus, ticker would be derived from governance. - leave a backdoor to hook the construction of ticker. - move 'Lambda' config from to consensus. | ||||
* | core: move blockdb into core package and minor change on governance ↵ | Wei-Ning Huang | 2018-09-17 | 25 | -30/+43 |
| | | | | | | | interface (#110) Since third party apps will possibly implement their only blockdb class, it make sense for the interface to be in core. Also add GetNumShards into the governance interface. | ||||
* | core: DKG interface (#108) | Jimmy Hu | 2018-09-17 | 8 | -4/+179 |
| | |||||
* | cleanup (#109) | Mission Liao | 2018-09-17 | 3 | -71/+39 |
| | | | | | | - With context, we don't need stopChan - Remove core.BlockChain. - Remove unused variable. | ||||
* | crypto: Add Benchmark for DKG (#105) | Jimmy Hu | 2018-09-14 | 2 | -0/+174 |
| | |||||
* | core: Fix BA Fork issues (#104) | Jimmy Hu | 2018-09-13 | 5 | -69/+60 |
| | |||||
* | core: fix VerifyPayload argument (#103) | Wei-Ning Huang | 2018-09-13 | 5 | -5/+5 |
| | | | | Since we are using a byte slice for storing payload. VerifyPayload() should also accepts a byte slice. | ||||
* | crypto: dkg implementation and test. (#96) | Jimmy Hu | 2018-09-13 | 6 | -2/+636 |
| | | | | | | | | * DKG API and test. * Change naming * Broadcast pubShares | ||||
* | core: replace acks with slice (#102) | Mission Liao | 2018-09-12 | 15 | -247/+172 |
| | |||||
* | core: types: use []byte for block Payload type (#101) | Wei-Ning Huang | 2018-09-12 | 8 | -22/+19 |
| | | | | | Change payload type to []byte instead of [][]byte to make it more generic. The user of the consensus core should marshal the payload into a byte slice by themselves. | ||||
* | core: total ordering with chain ID (#100) | Mission Liao | 2018-09-12 | 5 | -414/+363 |
| | |||||
* | simulation: integrate test.Transport (#99) | Mission Liao | 2018-09-11 | 16 | -985/+597 |
| | | | | | - Add marshaller for simulation by encoding/json - Implement peer server based on test.TranportServer - Remove network models, they are replaced with test.LatencyModel | ||||
* | core: timestamp (#98) | Jimmy Hu | 2018-09-11 | 13 | -361/+173 |
| | |||||
* | test: add transport layer (#97) | Mission Liao | 2018-09-10 | 10 | -12/+1100 |
| | | | | | | | | | | The purpose of transport layer is to abstract the way to send messages and setup connections between peers in a p2p network. The peer discovery is simulated by a hosted server: every peer sends its address to a known server. Once collecting enough peers, respond the whole peers lists to all peers. Changes: - Add test.Trasnport interface - Add test.Transport implementation by golang channel. - Add test.transport implementation by TCP connection. - Move LatencyModel to core/test package - Add Marshaller interface | ||||
* | CRYPTO: dkg library (#95) | Jimmy Hu | 2018-09-05 | 6 | -9/+101 |
| | |||||
* | misc: Polish BA. (#94) | Jimmy Hu | 2018-09-05 | 11 | -56/+84 |
| | |||||
* | core: BA-based consensus core. (#93) | Jimmy Hu | 2018-09-04 | 15 | -106/+616 |
| | |||||
* | Add GetChainNumber to Goverance (#92) | Jimmy Hu | 2018-09-03 | 5 | -23/+27 |
| | |||||
* | core: minor change to governance interface (#90) | Wei-Ning Huang | 2018-09-03 | 5 | -67/+30 |
| | |||||
* | core: Add a new structure `Position` and move `ShardID`, `ChainID` and ↵ | Jimmy Hu | 2018-09-03 | 24 | -228/+436 |
| | | | | `Height` from `Block` (#89) | ||||
* | Fix VerifyPayloads in nonBlockingApplication (#87) | Jimmy Hu | 2018-08-31 | 1 | -1/+1 |
| | |||||
* | Add methods to Application interface. (#86) | Jimmy Hu | 2018-08-31 | 7 | -92/+56 |
| | |||||
* | Use Network in Consensus core (#85) | Jimmy Hu | 2018-08-31 | 5 | -3/+163 |
| | |||||
* | core: Add PreparePayloads to Application and Remove blockConverter ↵ | Jimmy Hu | 2018-08-30 | 14 | -73/+73 |
| | | | | interface. (#84) | ||||
* | core: Change the lattice key from validatorID to chainID. (#83) | Jimmy Hu | 2018-08-30 | 7 | -98/+210 |
| | | | | | * Add chainID in simulation.Validator * Change validatorid to chainID in rbModule | ||||
* | core: tune total ordering performance (#81) | Mission Liao | 2018-08-30 | 9 | -443/+592 |
| | | | | | - Replace map with slice Compared to slice, accessing to map is slower and the memory usage is inefficient. | ||||
* | Copy block (#82) | Jimmy Hu | 2018-08-30 | 1 | -0/+2 |
| | |||||
* | core: Leader Selector. (#80) | Jimmy Hu | 2018-08-30 | 12 | -29/+311 |
| | |||||
* | core: Remove channel in agreement (#79) | Jimmy Hu | 2018-08-29 | 3 | -172/+111 |
| | |||||
* | crypto test for vote (#78) | Jimmy Hu | 2018-08-29 | 1 | -0/+18 |
| | |||||
* | core: Add agreement module (#77) | Jimmy Hu | 2018-08-29 | 5 | -2/+1099 |
| | |||||
* | core: tune performance (#73) | Mission Liao | 2018-08-28 | 11 | -202/+562 |
| | | | | | | | | | | | | | | | | | | | | | | - Avoid using recursive function in critical path. - Do not write through when using levelDB. Things put to levelDB would be safe from panic even we didn't force to write through every time. - Dump count of confirmed blocks proposed by self. - Avoid allocating variables in loop. - Return length of acking node set, we only need that when total ordering. - Fix potential bug: make sure win records updated when acking height vectors of candidates are changed. - Keep dirty validators in slice. - Add cache for objects to ease the pressure to garbage collector. - Cache global acking status when total ordering. - Add method to recycle blocks. - Marshal JSON should be called once for each broadcast. - Make updateWinRecord called in parallel. - Log average / deviation of latencies when simulation finished. | ||||
* | core: Add vote type and add field to block. (#76) | Jimmy Hu | 2018-08-28 | 8 | -4/+139 |
| | |||||
* | simulation: remove fake network (#74) | Wei-Ning Huang | 2018-08-25 | 3 | -166/+18 |
| | |||||
* | simulation: allow to run simulation with scheduler on k8s (#72) | Mission Liao | 2018-08-22 | 8 | -7/+102 |
| | | | | | | | | To run a simulation with scheduler on k8s: ./run_scheduler.sh 61 5 Where *61* means the simulation contains 61 validators, and *5* means the simulation utilizes 5 vCPUs and corresponding concurrent workers to run. | ||||
* | core: Notary ack application. (#70) | Jimmy Hu | 2018-08-22 | 9 | -0/+87 |
| | |||||
* | simulation: add simulation with scheduler (#71) | Mission Liao | 2018-08-21 | 15 | -89/+544 |
| | | | | | | | | - Add new field in test.Event: HistoryIndex HistoryIndex allow us to access them by their position in event history. - Record local time in test.App when receiving events. - Add statisitics module for slices of test.Event. - add new command line utility *dexcon-simulation-with-scheduler to verify the execution time of core.Consensus. | ||||
* | core: Notary ack (#69) | Jimmy Hu | 2018-08-21 | 11 | -188/+383 |
| | |||||
* | core: tune performance total ordering (#66) | Mission Liao | 2018-08-21 | 4 | -386/+577 |
| | | | | | | - the checking of `internal stability` is more expensive than checking `len(ANS) == validatorCount`. So only check it when `len(ANS) != validatorCount`. - cache the result of `grade` between candidates. - cache the `acking height vector` of each candidate. - add test on total ordering with different acking frequency between blocks. | ||||
* | core: NotaryAck interfaces. (#67) | Jimmy Hu | 2018-08-20 | 11 | -67/+136 |
| | |||||
* | simulation: taken network latency model into consideration in TCP mode (#68) | Mission Liao | 2018-08-20 | 3 | -15/+26 |
| | | | | | | - Clone block once for each broadcast - Add network latency model for TCPNetwork - Fix map concurrent write | ||||
* | core: implicit fields in types.Block used in reliable broadcast (#59) | Haoping Ku | 2018-08-17 | 4 | -69/+83 |
| | |||||
* | simulation: Fix port reuse error in simulation. (#65) | Jimmy Hu | 2018-08-17 | 2 | -16/+71 |
| | |||||
* | core: Remove notary ack. (#64) | Jimmy Hu | 2018-08-16 | 8 | -168/+197 |
| | |||||
* | Verify consensus info and the acking's signature (#63) | Jimmy Hu | 2018-08-16 | 1 | -3/+29 |
| | |||||
* | core: Add compaction chain module. (#60) | Jimmy Hu | 2018-08-16 | 6 | -18/+188 |
| | |||||
* | test: add test.Scheduler (#58) | Mission Liao | 2018-08-15 | 11 | -5/+976 |
| | | | | | | | | | | | When simulating execution of core.Consensus by passing packets through golang-channel or real-socket, we need to utilize time.Sleep and time.Now to simulate the required network/proposing latency. It's problematic when we try to test a simulation with long network latency. Instead, Scheduler would try to execute the event with minimum timestamp, thus time.Sleep is replaced with Scheduler.nextTick, and time.Now is replaced with Event.Time. Changes: - Add test.Scheduler. - Add test.Stopper interface to provide encapsulate different stop conditions for scheduler. - Add a reference implementation for test.Stopper, it will stop scheduler when all validators confirmed X blocks proposed from themselves. - Add a test scenario on core.Consensus that all validators are not byzantine. | ||||
* | core: Add a nonBlockingApplication. (#62) | Jimmy Hu | 2018-08-15 | 4 | -8/+238 |
| | |||||
* | test: refine test utility (#61) | Mission Liao | 2018-08-15 | 6 | -49/+307 |
| | | | | | * Add functionality to test.App * Add test utility to generate slices of types.ValidatorID | ||||
* | core: Prepare Genesis block. (#54) | Jimmy Hu | 2018-08-14 | 5 | -60/+125 |
| | |||||
* | remove cpu.prof (#57) | Jimmy Hu | 2018-08-14 | 1 | -0/+0 |
| | |||||
* | Add -cpuprofile and -memprofile to dexcon-simulation (#56) | Jimmy Hu | 2018-08-14 | 2 | -0/+28 |
| | |||||
* | test: Fix a bug in test. (#55) | Jimmy Hu | 2018-08-14 | 1 | -0/+1 |
| | |||||
* | core: add nack module (#41) | Haoping Ku | 2018-08-13 | 5 | -113/+605 |
| | |||||
* | Use RLock for simulation.simApp.blockByHash (#53) | Jimmy Hu | 2018-08-13 | 1 | -4/+3 |
| | |||||
* | simulation: Create Consensus core after Join. (#51) | Jimmy Hu | 2018-08-13 | 4 | -32/+31 |
| | |||||
* | simulation: fix concurrent map write (#52) | Wei-Ning Huang | 2018-08-13 | 4 | -6/+15 |
| | | | Fix concurrent map write and also change k8s settings. | ||||
* | core: Sign block in Consensus.PrepareBlock. (#50) | Jimmy Hu | 2018-08-13 | 8 | -19/+54 |
| | |||||
* | simulation: kubernetes: update config | Wei-Ning Huang | 2018-08-13 | 5 | -12/+12 |
| | |||||
* | core: ValidatorID.Hash is the hash of public key. (#49) | Jimmy Hu | 2018-08-13 | 5 | -9/+36 |
| | |||||
* | simulation: kubernetes: update config template | Wei-Ning Huang | 2018-08-13 | 1 | -0/+4 |
| | |||||
* | crypto: Add SigToPub. (#48) | Jimmy Hu | 2018-08-13 | 2 | -5/+35 |
| | | | | * Add SigToPub function in crypto | ||||
* | core: Hash block in Consensus.PrepareBlock. (#46) | Jimmy Hu | 2018-08-12 | 8 | -70/+162 |
| | | | | | | | | * Add hash to block * Check block hash in Consensus.sanityCheck * Add hashBlockFn in block generator.go | ||||
* | core: reliable-broadcast: delete old blocks (#47) | Haoping Ku | 2018-08-10 | 2 | -3/+13 |
| | | | | Delete all blocks in received blocks array for avoiding using too much memory space. | ||||
* | core: Modify Consensus interface (#45) | Jimmy Hu | 2018-08-10 | 6 | -19/+47 |
| | |||||
* | core: update governance interface and move K into config (#40) | Wei-Ning Huang | 2018-08-10 | 14 | -140/+233 |
| | |||||
* | Add genesis block to simulation app. (#44) | Jimmy Hu | 2018-08-10 | 1 | -0/+1 |
| | |||||
* | Fix the bug preventing us from testing large group when using TCP-Local (#42) | Mission Liao | 2018-08-10 | 4 | -29/+25 |
| | | | | | | | | | | | | | | | | | | | | * Fix the issue that processing genesis block twice. - Restore the mechanism to avoid sending block to proposer. * Fix the 'keep-alive' not working Quote from comments of net/http/request For client requests, setting this field prevents re-use of TCP connections between requests to the same hosts, as if Transport.DisableKeepAlives were set. * Remove useless field * Fix the test bug: I should provide '3' when test K=3 * Fixup: the parent hash of genesis block should be zero | ||||
* | core: Deliver only Hash to Application. (#43) | Jimmy Hu | 2018-08-10 | 5 | -20/+26 |
| | |||||
* | core: Add block hash signature functions in core/ctypto.go. (#39) | Jimmy Hu | 2018-08-10 | 4 | -10/+174 |
| | |||||
* | Add -race to go test (#38) | Jimmy Hu | 2018-08-09 | 1 | -1/+1 |
| | |||||
* | core: Add Block.IsGenesis() and set Block.ParentHash to 0 in genesis block. ↵ | Jimmy Hu | 2018-08-09 | 9 | -113/+109 |
| | | | | (#37) | ||||
* | Gopkg: fixup imports | Wei-Ning Huang | 2018-08-09 | 1 | -1/+21 |
| | |||||
* | simulation: Fix k8s simulation issues. (#36) | Jimmy Hu | 2018-08-09 | 3 | -9/+41 |
| | | | | | | | | | | | | * Refine peer server * k8s ignore * Keep peer server alive on k8s * Stop validators from accepting new blocks after peer server has shut down. * Add comment | ||||
* | core: Add Consensus to replace core.Blocklattice (#35) | Mission Liao | 2018-08-08 | 21 | -1237/+1039 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Make Sequencer return slice of blocks. * Fix naming issue The function 'getHeightVecto' would return ackingStatusVector. * Fix comment error. * Add methods to collect info when proposing blocks. * Add test.App * Add test.Gov * Move this type to core.types to avoid cyclic import. * Add core.Consensus * Move getMedianTime, interpoTime to util These functions are not depending on members of core.consensusTimestamp and is required when testing core.Consensus. * Make sure types.Block.Clone would copy critical fields. * Remove core.blocklattice * Define 'infinity' in core/total-ordering This definition is defined in core/blocklattice originally. * Fix a bug when processing the same block twice. * Integrate simulation with core.Consensus core.Consensus is a replacement of core.Blocklattice * Fix the comment to use sigular form. * Move lock mechanism to sub modules. * phi should be 2*fmax+1 * Fixup: should aborting when the validator is added * Fix for new block fields * Fix the bug that the total ordering sequence is wrong. | ||||
* | crypto: Add crypto module. (#34) | Jimmy Hu | 2018-08-08 | 15 | -17/+534 |
| | |||||
* | simulation: Show internal and external timestamp latency. (#30) | Jimmy Hu | 2018-08-07 | 5 | -17/+204 |
| |