aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* remove dexon/crypto/sha3 pkg.Jhih-Ming Huang2019-03-266-11/+12
|
* core: vm: sqlvm: add shared variables (#228)Meng-Ying Yang2019-03-263-11/+19
|
* core: vm: sqlvm: add ESCAPE grammarwmin02019-03-264-653/+768
| | | | | Provide ESCAPE grammar for specifying escape character in like pattern matching.
* core: vm: sqlvm: errors: add length fieldTing-Wei Lan2019-03-265-442/+484
| | | | | When an error corresponds to a source code token, it should be able to report the length of the token in addition to the position.
* core: vm: sqlvm: limit the depth of AST to 1024Ting-Wei Lan2019-03-263-7/+50
| | | | | Since we traverse an AST by calling functions recursively, we have to protect the parser by limiting the depth of an AST.
* core: vm: sqlvm: parser: move generated code to internal packageTing-Wei Lan2019-03-265-1565/+1585
| | | | | | | | Code generated by pigeon includes many exported symbols which should not be used by any other code other than the parser itself. To prevent them from being misused, we used to hide them by editing the generated code with sed. This commit removes the unreliable sed trick by putting generated code to internal package.
* core: vm: sqlvm: ast: use non-empty interfaces in DataType{En,De}codeTing-Wei Lan2019-03-262-80/+34
| | | | | | | In addition to changes required to move DataTypeEncode and DataTypeDecode to use TypeNode interface, this commit also unifies the meaning of 'Size' field in 'FixedBytesTypeNode'. It always counts the length in bytes now.
* core: vm: sqlvm: errors: fix typoTing-Wei Lan2019-03-261-1/+1
|
* core: vm: sqlvm: parser: don't use @, #, $ in unquoted identifiersTing-Wei Lan2019-03-262-35/+34
| | | | | | These symbols are allowed in Microsoft SQL or PostgreSQL, but the SQL standard doesn't mention them. It is still possible to use these symbols as identifiers by putting them in double quotes.
* core: sqlvm: schema: define type for table/column/index/sequence sizeyenlin.lai2019-03-262-5/+17
| | | | | The size of table in db and column/index/sequence in a table is bounded by uint8. Define types for better readability.
* core: vm: sqlvm: ast: handle error in AST printerTing-Wei Lan2019-03-262-33/+63
| | | | Catch the error reported by fmt.Fprintf and report it to the caller.
* core: vm: sqlvm: fill source code position in AST nodesTing-Wei Lan2019-03-267-1141/+1510
| | | | | | | | | | | | | | | Now all AST nodes should have position information recorded during parsing. These fields are intended to be used to report errors and make debugging easier. However, precise location of each token is currently unavailable. It can be done in the future if it becomes necessary. To make it easier to traverse an AST, GetChildren is modified to skip nil nodes in the output. This means callers of GetChildren don't have to check for nil in returned slices. AST printer is modified to print the position and the corresponding source code token. A few special handling for interfaces are removed because reflection works better for structs.
* core: vm: sqlvm: ast: use pointer receiversTing-Wei Lan2019-03-261-89/+89
| | | | | | | Since all nodes must be declared as pointers to satisfy the interface, it is no longer meaningful to use value receivers. It should make the code look more consistent and reduce the amount of memory copying during function calls because these structs takes at least 8 bytes.
* core: vm: sqlvm: ast: remove pointer indicator in printer outputTing-Wei Lan2019-03-261-5/+4
| | | | | | Since our 'Node' interface includes methods which must be implemented with pointer receivers, all AST nodes are now referenced with pointers and the '*' pointer indicator is no longer useful.
* core: vm: sqlvm: check if a number is a valid addressTing-Wei Lan2019-03-265-334/+312
| | | | | | | | | | | | This commit implements isAddress function to allow a number literal to be considered as an address literal. Since Solidity only allows '0x' to be written in lower case, we remove the handling of upper case '0X' to keep the behavior in sync with Solidity. In addition to isAddress implementation, this commit also removes 'String' methods from AST nodes to prevent them from implementing the builtin 'Stringer' interface. Therefore, our AST printer is now able to print struct fields of value nodes instead of only one string.
* core: vm: sqlvm: introduce interfaces for AST nodesTing-Wei Lan2019-03-269-1704/+2956
| | | | | | | | | In order to make our AST easier and safer to use, all declarations with empty interface type are now removed. This changes also makes it possible to traverse the AST without using reflection or understanding what each type means because all AST nodes have at least one common interface.
* core: vm: sqlvm: runtime entrypoing error handlingMeng-Ying Yang2019-03-263-5/+14
| | | | Return error.Error to reveal more information about returned error.
* dex: remove file that should not be committed (#204)Jimmy Hu2019-03-261-0/+0
| | | | | | * dex: remove file that should not be committed * add file to .gitignore
* Update .travis.ymlJimmy Hu2019-03-261-0/+1
|
* core: vm: sqlvm: parser: toDecimal handle .0wmin02019-03-262-0/+4
| | | | | To cover the pitfall of decimal.fromString, we need to add leading 0 at '^\.[0-9]+' case.
* core: rebase dev and fix lintJhih-Ming Huang2019-03-2610-4416/+27
|
* core: vm: sqlvm: types support data rangeMeng-Ying Yang2019-03-262-0/+82
| | | | | The data range is deterministic for specific type, `GetMinMax` is helper function to generate min, max value for clients.
* core: vm: sqlvm: export instruction's member (#197)JM2019-03-262-6/+6
|
* core: vm: sqlvm: revert Tuple structure (#193)JM2019-03-261-4/+5
|
* core: vm: sqlvm: modify Tuple.Data.Value typeJhih-Ming Huang2019-03-261-7/+3
| | | | | Modify Tuple.Data.Value type from *big.Int to interface{} and remove Max, Min.
* core: vm: sqlvm: shared interfaces and paramsJhih-Ming Huang2019-03-266-0/+245
| | | | | | | After reconstructing commits, we move shared interfaces and params as first runtime implementation. In this commit we define OP codes, runtime flow and entrypoint, and basic operand structs and minor helper components.
* core: vm: sqlvm: add schema define and implement rlp serializationwmin02019-03-264-42/+310
| | | | Implement schema struct and handle its rlp serialization.
* core: vm: sqlvm: ast: add encoder/decoder for decimal to byteswmin02019-03-262-11/+196
| | | | | | | | Add encoder/decoder to convert between decimal and bytes. Also handle issues below. * Signed & Unsigned * Padding * Floating point of fixed
* core: vm: sqlvm: ast: data type encoder and decoderwmin02019-03-262-0/+244
| | | | | Implement encode & decode function to convert between type node and 2-bytes type described on spec.
* core: vm: sqlvm: ast: don't hardcode output and indent in PrintASTTing-Wei Lan2019-03-262-26/+35
| | | | | It is now possible to write AST dump to a writer other than stdout and use indent string other than 2 spaces.
* core: vm: sqlvm: process non-UTF-8 input and escape sequencesTing-Wei Lan2019-03-268-337/+579
| | | | | | | | | | | | | | | Our parser is able to process queries with invalid UTF-8, provided that it is compatible with ASCII. Since doing so requires encoding the input before passing to pigeon, Parse* functions generated by pigeon are unexported because they should not be used directly. Escape sequences in string literals and identifiers are now recognized. In addition to escape sequences supported by solidity, we support \U similar to the one supported by Go to allow users to specify non-BMP Unicode code point without using multiple \x escapes. AST printer is modified to quote non-printable characters in strings to prevent control characters from messing up the terminal.
* core: vm: sqlvm: parser: properly handle errorsTing-Wei Lan2019-03-266-1242/+1637
| | | | | | Instead of ignoring errors, errors returned from external functions are normalized and reported to users. Errors which should be impossible to occur are converted to panic calls.
* core: vm: sqlvm: remove optional interface and add print tag for detailwmin02019-03-263-99/+49
| | | | | | | There are some changes in print ast utility. 1. instead of using optional interface to get detail, use reflect 2. implement a `print` field tag for printer switching detail mode or not
* core: vm: sqlvm: move AST and parser to their own packagesTing-Wei Lan2019-03-268-1837/+2010
| | | | | | | | In order to avoid putting too many different things in single package and allow other projects to reuse the syntax tree and the parser, these two components are moved to different packages and all nodes used in AST are now exported. A lot of comments are added in this commit to pass golint checks.
* core: vm: sqlvm: add a tool to run gofmt on pigeon sourcesTing-Wei Lan2019-03-261-0/+253
| | | | | | This tool is good enough to format our sqlvm grammar file. It is not guaranteed to work for all valid pigeon files, and it only process multi-line Go code blocks.
* core: vm: sqlvm: add sql language parser prototypingwmin02019-03-2613-0/+11043
| | | | | | | | | Add sql language parser prototyping along with 1. grammar file implemented with github.com/mna/pigeon 2. ast node struct definition 3. simple parser test which only test if error existed 4. ast printer utility for visualizing parsing result
* core: vm: vm interface (#164)JM2019-03-2623-84/+805
|
* core: vm: extract stateDB and contract outjm2019-03-2631-439/+509
| | | | | Extract stateDB and contract out from core/vm/evm to core/vm, such that other vm type can use the common modules.
* core: vm: refactor file structurejm2019-03-2696-888/+5300
| | | | | For support other vm types, this pr modified the core/vm file structures.
* core: set extended round block reward to zero (#298)Wei-Ning Huang2019-03-265-20/+102
| | | | | To discourage DKG set from prolonging the round indefinitely, we set the block reward of the extended round to 0. The gas fee is send to the DEXON governance owner for safe keeping and later used by the foundation.
* vendor: sync to latest core (#300)Jimmy Hu2019-03-2611-237/+222
|
* dex: fix deadlock (#299)Sonic2019-03-261-1/+1
|
* core: vm: fix DKG reset (#296)Wei-Ning Huang2019-03-243-24/+27
|
* vendor: sync to latest core (#295)Wei-Ning Huang2019-03-225-118/+175
|
* Revert "p2p/discover: increase IP address limits (#60)"Wei-Ning Huang2019-03-221-3/+2
| | | | This reverts commit 3ca44e556bd9561b0c6c64c7d3a4f95726c78be8.
* dex: skip duplicate vote to reduce gas used (#293)Wei-Ning Huang2019-03-211-27/+45
|
* dex: fix fast sync in BP mode (#291)Wei-Ning Huang2019-03-214-44/+78
| | | | Start blockproposer only after fast sync is completed (received ChainHead event), so watchcat is not falsely triggered.
* dex: reduce msg when broadcast tx (#292)Sonic2019-03-212-19/+51
| | | | | | | | | | Our network topology is different from ethereum, the nodes in notary set will connect each other directly. So there is a waste for flooding tx msgs in notary set. And nodes in notary set are more likely to propose block successfully, it is not useful to broadcast tx msgs to non notary set nodes. This PR will increase some tx confirm latency, but can reduce waste tx msgs a lot.
* core/vm: remove round from addDKG functions (#279)Jimmy Hu2019-03-2123-365/+1038
| | | | | | | | * vendor: sync to latest core * core/vm: remove addDKG functions * core: fix conflict
* core: vm: deny duplicate public key from registering (#289)Wei-Ning Huang2019-03-202-1/+20
|
* core: vm: pay fine to governance owner and trigger set size recalculation (#288)Wei-Ning Huang2019-03-201-1/+5
|
* indexer: support fast-sync (#287)Chung-Yu Liu2019-03-201-0/+2
|
* dex: recieve bp msg when recovery, use atomic to protect the flag (#286)Sonic2019-03-202-17/+19
|
* dex: ignore acceptableDist when force synchronise (#285)Sonic2019-03-203-5/+23
|
* consensus: dexcon: disqualify dead node (#280)Wei-Ning Huang2019-03-2011-152/+294
| | | | | | | | | | Since a qualified node might fail stopped, we need to remove them from qualified nodes to maintain network integrity. We do this by inspect the previous round to see if there are dead nodes. A dead node is a notary set node that does not propose any block in the previous round. We disqualify them by fining them so their staked value is 1 wei below minStake. This make them unqualified for being notary set in the follow on rounds.
* core: check coinbase for empty block (#282)Jimmy Hu2019-03-191-6/+13
|
* dex: fix start bp node with empty datadir (#278)Sonic2019-03-192-22/+31
| | | also modify some debug log
* core: vm: emit event when transfering owner (#277)Wei-Ning Huang2019-03-193-0/+48
|
* core: fix headerchain coinbase validationWei-Ning Huang2019-03-191-2/+7
| | | | Coinbase address is the owner address of the node.
* dex: add block confirme latency (#275)Jimmy Hu2019-03-192-0/+3
|
* core: vm: automatically calculate notary set size (#276)Wei-Ning Huang2019-03-196-27/+126
|
* dex: do not start watchcat when blockchain is empty (#273)Wei-Ning Huang2019-03-191-4/+8
|
* core: vm: add extra checks to prevent DKG spamming (#272)Wei-Ning Huang2019-03-196-67/+187
| | | | Add two maps to check the uniqueness of DKGMasterPublicKey and DKGComplaints to prevent malicious actors from spamming it.
* core: vm: fix naming consistencyWei-Ning Huang2019-03-192-11/+11
|
* app: validate gas price while preparing block (#274)bojie2019-03-182-34/+126
| | | | Skip tx which is under price and add test case. Use the key which has balance in test case to run test more correctly.
* dex: align recovery dMoment when resuming consensus (#271)Wei-Ning Huang2019-03-181-1/+16
| | | | | | In theory BA should tolerant inconsistant start time between every node. Since the vote cache is limited, we can not keep all the votes and pass them around all nodes. To fix this, we align the next recovery dmoment so nodes start at the same time.
* cmd: fix default recovery network RPC URLWei-Ning Huang2019-03-181-4/+5
|
* fixup! core: fill in genesis timstamp and remove dMoment from protocol ↵Wei-Ning Huang2019-03-181-4/+2
| | | | handshake (#263)
* p2p, dex: add debug log (#269)Sonic2019-03-185-18/+68
|
* core: check reset of dkg types when adding (#268)Jimmy Hu2019-03-178-54/+195
| | | | | | * vendor: sync to latest core * core: check dkg reset
* dex: properly shutdown protocol stack (#267)Wei-Ning Huang2019-03-173-6/+12
|
* dex: properly start and stop the block proposer module (#264)Wei-Ning Huang2019-03-174-19/+11
| | | | Stop blockproposer in the Stop() method of node service so the process doens't hang.
* core: vm: reorder minGasPriceLocWei-Ning Huang2019-03-172-5/+5
|
* core: fill in genesis timstamp and remove dMoment from protocol handshake (#263)Wei-Ning Huang2019-03-1710-31/+31
| | | | | Fill in dmoment as genesis block timestamp. This allow us to remove dMoment check from protocol handshake since genesis block hash itself will protect us against different dMoment.
* dex: implement recovery mechanism (#258)Wei-Ning Huang2019-03-1732-435/+2435
| | | | | | | | | * dex: implement recovery mechanism The DEXON recovery protocol allows us to use the Ethereum blockchain as a fallback consensus chain to coordinate recovery. * fix
* app: remove log handler in test (#261)bojie2019-03-161-3/+0
|
* dex: add meter for agreement result (#260)Wei-Ning Huang2019-03-161-12/+14
|
* dex: rename lattice to coreWei-Ning Huang2019-03-167-43/+43
|
* app: set delivered height correctly (#259)bojie2019-03-161-0/+1
|
* core: vm: group min gas price with related state variables (#257)Wei-Ning Huang2019-03-144-24/+24
|
* dex: priority for ba vote (#256)Jimmy Hu2019-03-141-0/+17
| | | | | | | | * dex: priority select on vote * More aggressive priority for vote * collect all queuedVotes
* core: vm: implement transfer node ownership (#255)Wei-Ning Huang2019-03-144-10/+85
|
* p2p: report peer counts to datadog (#254)Cliff Lin2019-03-142-0/+4
|
* core: vm: create new oracle contract instance in each call (#251)Wei-Ning Huang2019-03-133-6/+16
| | | | | Since the VM might be called from different source (downloader, RPC, etc.). We need to make the call state separate. Modify the calling sequence so a new oracle contract instance is used on each run.
* vendor: sync to latest core (#253)Jimmy Hu2019-03-1316-138/+742
|
* core/vm: use core util to get threshold of tsig (#250)Jimmy Hu2019-03-131-3/+4
|
* params: update testnet config to 40 nodesJimmy Hu2019-03-132-8/+8
|
* vendor: sync to latest core and fix conflictJimmy Hu2019-03-1211-211/+276
|
* params: update taipei bootnode IPWei-Ning Huang2019-03-121-1/+1
|
* p2p/discover: fix peer discovery (#248)Wei-Ning Huang2019-03-121-0/+2
| | | | | | | | | | The refactor in 4cd90e02e23ecf2bb11bcb4bba4fea2ae164ef74 introduced livness checks for nodes. However, the change in 86ec742f975d825f42dd69ebf17b0adaa66542c0 did not properly set the initial liveness check value for verified node. For verified node we should set livenessCheck to 1 initially. Without this change, the node entry will not be properly send to other nodes and the network would be broken.
* core: touch verifierCache at 90% of round (#247)Jimmy Hu2019-03-121-2/+35
|
* app: new app test flow (#244)bojie2019-03-129-70/+2289
|
* core: vm: remove delegation mechanism (#245)Wei-Ning Huang2019-03-128-1001/+267
| | | | | | | | | | | | | The current delegation mechanism are prone to unstaking attack. i.e. a malicious attacker could unstake a small amount from a lot of node it staked before and make them unqualified, which leads to potential failure of the network. Since DEXON does not use consensus like DPoS, node is required to have at least MinStake in order to become a node. Voting mechanism is not required in our system since qualified node does not depends on the number of votes. Instead of managing the delegation mechanism in governance contract, we should let the owner manage the delegation and reward distribution mechanism on their own.
* dex: fetcher: modify parameters to speedup syncing (#239)Wei-Ning Huang2019-03-123-5/+7
|
* dex: rename IsLatticeSyncing to IsCoreSyncing (#238)Wei-Ning Huang2019-03-123-5/+5
|
* core: vm: expose CRSRound and DKGRound and fix consistency (#236)Wei-Ning Huang2019-03-124-63/+121
|
* vendor: sync to latest core (#237)Jimmy Hu2019-03-126-36/+98
|
* build: ci: extend legacy-evm test timeout to 10m (#235)JM2019-03-121-1/+1
| | | | Since it costs almost 5min on new tests data, this pr extends the timeout to 10min.
* Dockerfile.alltools: update Dockerfile for building tools (#234)Wei-Ning Huang2019-03-122-10/+10
|
* cmd: nodekey: add command to generate and inspect nodekey (#233)Wei-Ning Huang2019-03-121-0/+93
|
* tests: update testdataWei-Ning Huang2019-03-121-0/+0
|
* dex, dex/downloader: remove some TODO comments (#232)Sonic2019-03-125-13/+1
|
* misc: update dockerignoreJimmy Hu2019-03-121-1/+2
|
* app: refactor app run as single chain (#226)bojie2019-03-124-290/+161
|
* test: update test parameters (#229)Wei-Ning Huang2019-03-125-24/+26
| | | | | | * test: update test parameters * update smoke test parameter
* vendor: sync to latest core (#231)Jimmy Hu2019-03-124-27/+52
|
* core: fix dkgJimmy Hu2019-03-121-12/+47
|
* params: Change taipei to 40 nodes (#227)Jimmy Hu2019-03-122-4/+4
|
* vendor: sync to latest core (#225)Jimmy Hu2019-03-123-73/+33
|
* dex: fill in correct coinbase address (#223)Wei-Ning Huang2019-03-123-723/+19
| | | Also remove app_test.go because of the refactor bojie@ is working on.
* params: Update config (#224)Jimmy Hu2019-03-122-10/+10
| | | | | | * params: Update config * Update taipei to 30 nodes setup
* core: vm: validate addDKGMasterPublicKey caller properly (#220)Wei-Ning Huang2019-03-124-63/+62
| | | | | | There are two keys in the system: one is the owner's key which is used for stake / unstake. The other is the node key which is used for DKG related operations. We need to allow them to be different so fund renmains safe even if the the node key is lost.
* core: vm: flatten governanceWei-Ning Huang2019-03-1221-631/+679
|
* core: sync to latest core (#214)Jimmy Hu2019-03-1233-759/+555
| | | | | * vendor: sync to latest core * fix for single chain
* misc: Update DockerfileJimmy Hu2019-03-121-2/+2
|
* test: build bootnode if not existWei-Ning Huang2019-03-121-3/+10
|
* params: add Yilan network (#207)Mission Liao2019-03-1211-5/+96
| | | | | | * Add Yilan network * Fixup: remove dummy log
* core: Fixed gas price (#205)Jimmy Hu2019-03-1212-13/+161
| | | | | | | | | | * core/vm: update abi * core/vm: add MinGasPrice to gov * params: Add MinGasPrice to Config * dex: SuggestPrice from Governance * test: add minGasPrice to genesis.json * core: check underpriced tx * dex: verify with gas price
* core: set oracle contract's code (#209)Sonic2019-03-124-4/+9
| | | So that other contract can call oracle contract.
* fee: fix wrong gas used (#208)bojie2019-03-121-0/+2
|
* zoo: reduce monkey valueJimmy Hu2019-03-121-2/+2
|
* core: Remove K, Phi and NumChains from Governance (#198)Jimmy Hu2019-03-1240-4707/+1285
| | | | | | * change default sync_core.sh * vendor: sync to latest core * core: Remove K, Phi and NumChain
* copy testnet config to taipeiJimmy Hu2019-03-122-9/+9
|
* misc: add ignore fileJimmy Hu2019-03-121-0/+1
|
* core/vm: fix getConfigState (#203)Jimmy Hu2019-03-121-4/+3
|
* vm: reset DKG (#190)Jimmy Hu2019-03-124-70/+562
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * vm: Update gov abi * vm: Add DKGResetCount to state helper * vm: add getter * vm: Add DKGReset event * vm: Add resetDKG method * vm: check resetDKG criteria * vm: Add new CRS * vm: add helper pop2DByteArray * vm: emit event * vm: Add CoreMock to GovernanceContract * vm: bug fix * add test for resetDKG * vm: Add test * fix test * Modify mock interface
* dex: some minor improvements (#195)Sonic2019-03-123-144/+117
| | | | | | | | | | * dex: improve some msg propagation * dex: support send a batch of lattice blocks, votes, randomnesses To reduce msgs number of PullBlocks, PullVotes, PullRandomness * dex: minor improvement
* dex: Add a flag to GetBlockHeadersMsg and GetBlockBodiesMsg (#188)Sonic2019-03-127-63/+95
| | | | | | | | | * dex: Add a flag to GetBlockHeadersMsg and GetBlockBodiesMsg So that we can dispatch the response msg to fetcher or downloader easily. * fixup! dex: Add a flag to GetBlockHeadersMsg and GetBlockBodiesMsg
* travis: Add notification to slackJimmy Hu2019-03-121-0/+3
|
* p2p, dex: some fixes (#189)Sonic2019-03-122-1/+4
| | | | | * p2p: try resolving direct dial when dial fail * dex: avoid concurrent map read and map write
* p2p, dex: rework connection management (#183)Sonic2019-03-1211-1084/+424
| | | | | | * p2p, dex: rework connection management * dex: refresh our node record periodically * dex: don't send new record event if no new record
* transaction: use all transaction gas to reduce attack intention (#180)bojie2019-03-122-1/+43
| | | The ci test in /tests will use origin evm logic.
* vendor, param: sync to latest core and update dmoment (#182)Jimmy Hu2019-03-123-25/+29
| | | | | | * vendor: sync to latest core * params: update dmoment
* app: prepare/verify block limit in correct round (#181)bojie2019-03-121-2/+2
|
* core/vm: modify Withdrawn event and add NodeRemoved event (#179)Jimmy Hu2019-03-122-4/+31
| | | | | | * core/vm: add delegatorAddr to withdrawn event * core/vm: update gov abi * core/vm: add NodeRemoved event
* vendor, param: sync to latest core and update testnet config (#178)Jimmy Hu2019-03-123-24/+25
| | | | | * param: update testnet config * vendor: sync to latest core
* params: Update taipei configJimmy Hu2019-03-121-4/+4
|
* params: update testnet config (#177)Jimmy Hu2019-03-125-96/+164
| | | | | * vendor:sync to latest core * params: Update config for testnet
* core: vm: refactor governance and add node info oracle (#174)Wei-Ning Huang2019-03-126-683/+954
|
* core: vm: Add amount to undelegate event (#176)Jimmy Hu2019-03-122-4/+9
|
* core: vm: more change to the randomness calculation (#175)Wei-Ning Huang2019-03-121-5/+5
| | | | To prevent attacker from sending TX through a intermediate contract. Always use the original tx sender's adddress and nonce.
* core: vm: modify randomness calculation algorithm (#173)Wei-Ning Huang2019-03-122-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | The original algorithm used for calculating algorithm is vulnerable to cross context re-entry attack. Example as follows: contract B { event Value(uint256 value); uint256 public value; function call() public { value = rand; emit Value(value); } } contract A { function randTwice(address bAddr) public { B b = B(bAddr); b.call.gas(100000)(); b.call.gas(100000)(); } } The two `b.call` will result in the same randomness value. This commit fix the issue by recording a called index used to store how many times opRand is called, and use it as argument to the Keccak call.
* consensus: dexcon: snapshot round height when finalizing block (#170)Wei-Ning Huang2019-03-1217-279/+332
| | | | Instead of having BP to send a tx to register the round height, just modify the state when finalizing block.
* dex: reduce pullVote (#172)Jimmy Hu2019-03-121-2/+3
|
* ci: move smoke-test to PR testWei-Ning Huang2019-03-121-17/+17
|
* ci: Only build on dev and master (#171)Jimmy Hu2019-03-121-0/+4
|
* dex: Add rate limit for pullVote (#169)Jimmy Hu2019-03-121-7/+21
|
* core, dex/downloader: polish headers verification and blocks insertion logic ↵Sonic2019-03-1214-625/+1143
| | | | | | | | (#168) Refactor GenerateDexonChain function, move governance tx logic to the user of GenerateDexonChain (testchain_test.go) and move fake node set code to FakeDexcon.
* params: Update testnet dmomentJimmy Hu2019-03-122-2/+2
|
* params: Update testnet config (#167)Jimmy Hu2019-03-1213-79/+122
| | | | | | | | * vendor: sync to latest core * param: update testnet config * params: update dmoment
* param: Update testnet dmoment (#166)Jimmy Hu2019-03-121-1/+1
|
* travis: re-encrypt GCP credential file (#165)bojie2019-03-123-3/+3
|
* params: update testnet dMomentWei-Ning Huang2019-03-121-1/+1
|
* params: update testnet genesis and dMomentWei-Ning Huang2019-03-122-6/+5
|
* p2p: report latency and relative latency to datadog (#162)Wei-Ning Huang2019-03-122-3/+14
|
* travis: add new CI test to test fullnode (#138)bojie2019-03-1210-39/+366
|
* dex: add block number gauge (#140)haoping-ku2019-03-121-18/+25
|
* core, dex: use block hash as witness data (#160)Sonic2019-03-127-74/+30
| | | | | | | | | | Using only state root and receipt root as witness data can not protect other fields in block header, ex: bloom, difficulty, gas limit, gas used... So that everyone can manipulate these fields to create as many valid blocks at the same height as he want. Although this will not effect the state, one can spam us when syncing. Using block hash as witness data can solve this.
* blockchain: add mutex lock to prevent fork (#159)bojie2019-03-121-1/+6
|
* common: fix big scan from bytes (#157)johnliu-dexon2019-03-122-2/+6
| | | | | | We store string of number, not bytes value into database 10 is stored as 0x3130, not 0x0a Use UnmarshalText instead of SetBytes
* core: sync to latest core (#158)Jimmy Hu2019-03-127-47/+63
| | | | | | * vendor: sync to latest core * param: Update config * core: update genesis alloc
* params: update testnet dMomentWei-Ning Huang2019-03-121-1/+1
|
* Fix the usage of sync.Map (#156)Mission Liao2019-03-121-4/+2
|
* app: fix reward bug with empty block (#155)bojie2019-03-122-12/+15
| | | | | | | | * app: fix reward bug with empty block * make block generation consistent * revert change to dmoment in genesis.json
* vendor: sync to latest core (#154)Jimmy Hu2019-03-1221-344/+891
| | | | | | * vendor: sync to latest core with BA3.0 * params: Update dmoment
* test: update dmoment with python script (#153)Wei-Ning Huang2019-03-121-2/+11
|
* params: update testnet dMomentWei-Ning Huang2019-03-121-1/+1
|
* app: remove pending block logic (#149)bojie2019-03-1214-466/+342
|
* params: write dMoment into ChainConfig (#150)Wei-Ning Huang2019-03-1212-39/+42
|
* core: update taipei allocJimmy Hu2019-03-121-1/+1
|
* params: update genesis configWei-Ning Huang2019-03-124-25/+30
|
* test: Update bootnode pathJimmy Hu2019-03-121-1/+1
|
* params: update bootnode IPWei-Ning Huang2019-03-121-8/+3
|
* consensus: implement DEXON cryptoeconomics v4.0 (#145)Wei-Ning Huang2019-03-1217-240/+479
|
* core: vm: add totalSupply and totalStaked in the governance contract (#144)Wei-Ning Huang2019-03-125-37/+146
| | | | | | | Add totalSupply and totalStaked in the governance contract for the preperation of DEXON cryptoeconomics 4.0. Also removed the unstaked variable in node info and improve tests for delegate/undeleate.
* core: vm: move governance abi to a separate file (#143)Wei-Ning Huang2019-03-123-1055/+1076
|
* core: vm: emit events for more governance actions (#142)Wei-Ning Huang2019-03-121-0/+145
|
* misc: Fix makefileJimmy Hu2019-03-121-2/+2
|
* core: update testnet genesis_allocJimmy Hu2019-03-122-3/+3
|
* core: update taipei network genesis allocWei-Ning Huang2019-03-121-1/+1
|
* indexer: pass network-related params through config (#133)Meng-Ying Yang2019-03-122-0/+14
| | | | | | | | Pass following network related params: * Genesis block * Network ID And sync mode for indexer configuration.
* dex: remove unused log (#136)Sonic2019-03-121-4/+0
| | | | | | * fixup! app: use gcp storage instead of azure for builds (#81) * dex: remove unused log
* core: fix corner case when initializing round height (#134)Sonic2019-03-121-1/+1
|
* app: implement logic for prepare/verify correctly when chain number change ↵bojie2019-03-128-25/+383
| | | | (#118)
* dex: replace NodeMeta with ENR (#132)Sonic2019-03-129-255/+236
|
* travis-ci: fix gcp-linux build (#131)Wei-Ning Huang2019-03-121-3/+0
|
* core: vm: implement byzantine reporting mechanism (#128)Wei-Ning Huang2019-03-128-100/+719
|
* params: update taipei genesis config (#130)Wei-Ning Huang2019-03-122-4/+4
|
* dex: fix test due to consensus-core changeWei-Ning Huang2019-03-121-9/+9
|
* vendor: sync to latest core (#129)Wei-Ning Huang2019-03-1213-90/+104
|
* vendor: update bls package (#127)Meng-Ying Yang2019-03-122-3/+6
| | | | * Add missing cpp file * Align root and sub folder hash
* dex: fix cache error (#126)Jimmy Hu2019-03-121-0/+1
|
* vendor: sync to latest core (#125)Jimmy Hu2019-03-1210-86/+288
|
* core, indexer, dex: fix DexconApp block deliver after synced (#122)Sonic2019-03-123-15/+16
| | | | | | | When starts a bp node to sync with the network, bc.chainLastHeight map may not be initialized yet. Just return error if we can not get chain last height when preparing payload and verify block.
* core: fix vm wrong round height context (#124)Sonic2019-03-121-0/+45
| | | | Let roundHeightMap be corret whenever we starting a bp node.
* core: update taipei testnet genesis config and alloc (#119)Wei-Ning Huang2019-03-122-3/+3
|
* test: update run_test.sh with dmomentJimmy Hu2019-03-121-0/+4
|
* vendor: sync to latest core (#121)Wei-Ning Huang2019-03-122-27/+30
|
* node: increase default max number of peers (#120)Wei-Ning Huang2019-03-122-2/+2
|
* Indexer plugin extension and custom flags support (#117)Meng-Ying Yang2019-03-125-0/+13
| | | | | | * indexer: ReadOnlyBlockchain returns underlying engine * indexer: plugin configs support custom flags
* core: vm: add missing unittests for nodes/delegators (#116)Wei-Ning Huang2019-03-122-3/+13
|
* travis-ci: fix gcp-linux build (#114)Wei-Ning Huang2019-03-121-1/+1
| | | | The ubuntu trusty distribution binutils-aarch64-linux-gnu package does not contain the gold linker. Use the xenial distribution instead.
* params: update taipei testnet genesis and config (#113)Wei-Ning Huang2019-03-124-9/+11
|
* indexer: ReadOnlyBlockChain returns related configs (#110)Meng-Ying Yang2019-03-121-0/+4
| | | | For restoring mock componenets (such as: VM, Backend, ...etc), blockchain related configs should be exposed.
* Sync latest DEXON core (#111)Mission Liao2019-03-123-66/+112
|
* travis-ci: fix osx build (#112)Wei-Ning Huang2019-03-121-2/+13
|
* app: use gcp storage instead of azure for builds (#81)bojie2019-03-12377-3483/+142209
| | | | | * vendor: add dependencies for using GCP storage * app: use gcp storage instead of azure for builds
* core/vm: Add fine to governance. (#107)Jimmy Hu2019-03-124-135/+295
| | | | | | | | * core/vm: Add Fined field to nodeInfo. * core/vm: Add PayFine to Governance * Not qualify if staked-fine < minStake() * Add test for fine * Update genesis hash
* Dockerfile: clean bls before build (#109)Wei-Ning Huang2019-03-122-3/+5
|
* indexer: support data exporting/forwarding (#103)Meng-Ying Yang2019-03-128-0/+190
| | | | | | | | | To support more effective and flexible blockchain info exploring, we add `indexer` package, defines the flow of indexer dameon, and integrate into dex.Dexon fullnode. For more export options, we use Golang built-in `plugin` package to support mulitple implementations.
* vendor: sync dexon-foundation/bls to latest dev (#108)Wei-Ning Huang2019-03-124-32/+10
|
* dex/downloader: fix bug when syncing (#106)Sonic2019-03-121-2/+13
| | | | | Since blocks will interleave around round change, we will probably need to verify blocks at previous round.
* cmd/monkey: change feeder gas limitJimmy Hu2019-03-121-2/+2
|
* dex: add pull randomness (#105)Jimmy Hu2019-03-1216-167/+361
| | | | | * vendor: sync to latest core * dex: Add PullRandomness
* common: add utilities for Big type (#104)Meng-Ying Yang2019-03-121-0/+6
| | | | | - Add String() for common usage which call original `big.Int`'s `String()` - Add ToBigInt() for type convertion
* core: add database/sql support for more types (#102)Meng-Ying Yang2019-03-124-9/+243
| | | | | | | | | * core: types: add database/sql support for BlockNonce * common: add database/sql support with Big New Big type is declared to let big.Int support database/sql by implementing Scan() and Value() on new type.
* vendor: sync DEXON core and fix conflicts/missings (#101)Mission Liao2019-03-1215-311/+366
| | | | | | | Merging these commits in DEXON consensus core: - https://github.com/dexon-foundation/dexon-consensus/commit/dce509a13ef5873b9cae3c1cabdb97e219b6fb7d - https://github.com/dexon-foundation/dexon-consensus/commit/6d1c1aeea0d3e75d10cbb2712c68b4c422ba8ba6 - https://github.com/dexon-foundation/dexon-consensus/commit/c1ed57c4abaf1f4758e52f082bb7114ad00c8b39
* params: enable constantinople fork for testnetsWei-Ning Huang2019-03-121-1/+2
|
* monkey: add ERC20 token transfer (#99)johnliu-dexon2019-03-124-4/+125
| | | | Add ERC20 token (Banana) and feeder Fix call contract parameters
* README.md: clarify licensing terms (#100)Wei-Ning Huang2019-03-121-0/+2
|
* core/types: SigCache with a limited size (#98)Jimmy Hu2019-03-122-21/+33
| | | | | | * core/types: SigCache with a limited size * minor tweaks
* core, dex, internal: block proposer syncing (first iteration) (#96)Sonic2019-03-1212-100/+1199
| | | | | | | | | | | | | | | | | | | | | | * dex, internal: block proposer syncing (first iteration) * core: find block from db if not in memory This fix handles stopping proposing and then restarting * core: no need to reorg when reset Dexon will not fork. This commit also fix when a block confirm but its parent is not in db yet, during restarting proposing. * dex: always accept NewBlockMsg, NewBlockHashesMsg We need to accept NewBlockMsg, NewBlockHashesMsg to sync current block with other peers in block proposer mode when syncing lattice data. It's a waste when the node is synced and start proposing. Todo: control msg processing on/off more granular, accept NewBlockMsg, NewBlockHashesMsg when syncing, but stop when synced.
* core: vm: Add `MPKReady` to governance (#97)Jimmy Hu2019-03-1219-88/+481
| | | | | | * core/vm: Add DKGMPKReady * param: update GenesisHash * vendor: sync to latest core
* core/vm: fix nodes method in governanceJimmy Hu2019-03-121-1/+1
|
* dex: remove duplicate declaration of WitnessData (#92)Wei-Ning Huang2019-03-124-21/+3
| | | | Remove duplicate declaration of WitnessData and remove the TxHash field in witness data since it does not need to be witnessed.
* cmd/monkey: decrease Distribute amount to 100 DXNJimmy Hu2019-03-121-1/+1
|
* core: vm: add undelegate fund lockup mechanism (#94)Wei-Ning Huang2019-03-126-45/+251
| | | | | Only allow a user to withdraw funds after a certain lockup period. This way, the fund of a bad actor could be confiscated before he could escape.
* core: update genesis allocJimmy Hu2019-03-121-1/+1
|
* dex: stop consensus core (#93)Jimmy Hu2019-03-121-0/+1
|
* vendor: sync to latest core (#91)Mission Liao2019-03-1215-117/+563
| | | | | | - Implement new methods in db to cache DKG private key. - Implement new methods in db to cache compaction chain tip.
* vendor: sync to latest core and fix conflictJimmy Hu2019-03-1217-234/+359
|
* dex, cmd: Add DMoment to command line (#87)Jimmy Hu2019-03-124-6/+20
|
* cache: prune cache correctly (#88)bojie2019-03-121-2/+1
|
* ci: auto retry test (#89)Jimmy Hu2019-03-121-3/+3
|
* app: remove unnecessary code (#86)bojie2019-03-122-15/+3
|
* core: governance interface should return correct DKG master public keys (#85)Wei-Ning Huang2019-03-122-24/+21
|
* dex: Pull blocks from blockdb if cache miss (#84)Jimmy Hu2019-03-123-4/+40
|
* Update README.md (#83)Jimmy Hu2019-03-121-1/+1
|
* ci: migrate to travis-ci.org (#82)Jimmy Hu2019-03-121-1/+1
|
* Dockerfile: fix path and dependency (#80)s60912frank2019-03-121-2/+2
| | | | | | | | * Dockerfile: fix path and dependency * Update Dockerfile Co-Authored-By: s60912frank <s60912frank@gmail.com>
* vendor: sync to latest core and fix conflict (#79)Jimmy Hu2019-03-126-99/+272
|
* app: return retry later instead of retry with sleep time (#78)bojie2019-03-121-31/+22
|
* core, dex: polish sync (#75)Sonic2019-03-127-8/+82
| | | | | | | | | | | | | | | - Broadcasting blocks at chain head event is not correct when the full node is not running in block proposer mode. Introduce NewFinalizedBlockEvent, this event is post by the full node which runs in block proposer mode when a block is witnessed and resulting in some blocks are considered finalized. - Non block proposer node will still broadcast blocks at the following moment (same as ethereum): 1. a sync with a peer is terminated successfully 2. a block passes the fetcher's header check during inserting blocks 3. a block is successfully inserted by fetcher - Don't trigger a sync when we are not behind other peers more than acceptable distance. Fetcher is able to cover this.
* README.md: add gitter.im badges (#77)Wei-Ning Huang2019-03-121-2/+3
| | | | | * README.md: add gitter.im badges * Update README.md
* app: misc fixes (#76)bojie2019-03-121-50/+30
| | | | Use sync map to prevent concurrent read write. Use last pending state to prepare/verify transactions.
* dex: replace total difficulty with block number (#73)Sonic2019-03-1210-177/+143
| | | | | | | In dexon, we don't "mine" and the blockchain won't and shouldn't fork, so there is no difficulty concept, just replace it with block number. Note: this commit only replace total difficulty related logic and code in dex, dex/downloader package.
* core, dex: Timeout for prepare payload (#72)Jimmy Hu2019-03-123-8/+68
| | | | | | * Timeout on prepare payload * Leave 2 CPU for others * Add hardLimit and softLimit to PreparePayload
* dex: use whole id to query peer info (#74)Sonic2019-03-121-1/+1
|
* app: add app test case and benchmark (#66)bojie2019-03-126-32/+991
|
* monkey: increase amount and send random amount (#70)Jimmy Hu2019-03-121-2/+4
|