Commit Graph

6123 Commits

Author SHA1 Message Date
Dave Collins
08528c28b7
netsync: Remove unused tx submission processing.
This removes the code related to submitting transactions through the
network sync manager since it is no longer used.
2021-12-05 02:58:49 -06:00
Dave Collins
df67eca18e
rpcserver: Submit transactions directly.
This modifies the adaptor that the RPC server uses for transaction
submission to process the transaction directly instead of piping through
the netsync package.  There is no longer any reason to incur the extra
overhead since the mempool is concurrent safe the initial reasons for
piping it through netsync no longer apply.  This can be seen by noting
that the net sync manager doesn't do anything except call the mempool
method.
2021-12-05 02:58:48 -06:00
Dave Collins
71b0a793ba
rpcserver: Rename var to make linter happy. 2021-12-05 02:58:48 -06:00
Donald Adu-Poku
daf6c25c9f indexers: update indexer error types.
This updates the wire error types to leverage go 1.13 errors.Is/As
functionality as well as confirm to the error infrastructure best
practices outlined in #2181.
2021-12-05 01:38:15 -06:00
Dave Collins
17ded215f3
primitives: Add inclusion proof benchmarks.
BenchmarkGenerateInclusionProof
-------------------------------
64_leaves     31101     38577 ns/op    2240 B/op   2 allocs/op
128_leaves    15512     77140 ns/op    4320 B/op   2 allocs/op
256_leaves     7999    155127 ns/op    8448 B/op   2 allocs/op
2048_leaves     975   1237867 ns/op   65888 B/op   2 allocs/op

BenchmarkVerifyInclusionProof
-----------------------------
64_leaves     333319   3999 ns/op   0 B/op   0 allocs/op
128_leaves    287670   4187 ns/op   0 B/op   0 allocs/op
256_leaves    249007   4841 ns/op   0 B/op   0 allocs/op
2048_leaves   181994   6683 ns/op   0 B/op   0 allocs/op
2021-12-04 17:57:18 -06:00
Dave Collins
9bda0b173a
primitives: Add inclusion proof funcs.
This adds new functions for generating and verifying inclusion proofs
along with associated tests.

The functions are direct ports of the functions of the same names from
blockchain/standalone.

It also updates the documentation.
2021-12-04 17:57:15 -06:00
Dave Collins
a4526b4fa3
primitives: Add merkle root benchmarks.
BenchmarkCalcMerkleRootInPlace
------------------------------
20_leaves      95551      12436 ns/op   0 B/op   0 allocs/op
1000_leaves     2047     591660 ns/op   0 B/op   0 allocs/op
2000_leaves     1018    1179846 ns/op   0 B/op   0 allocs/op
4000_leaves      507    2357246 ns/op   0 B/op   0 allocs/op
8000_leaves      254    4710341 ns/op   0 B/op   0 allocs/op
16000_leaves     127    9499098 ns/op   0 B/op   0 allocs/op
32000_leaves      62   18876558 ns/op   0 B/op   0 allocs/op

BenchmarkCalcMerkleRoot
-----------------------
20_leaves      92455      12840 ns/op       640 B/op   1 allocs/op
1000_leaves     1965     608127 ns/op     32769 B/op   1 allocs/op
2000_leaves      969    1261865 ns/op     65536 B/op   1 allocs/op
4000_leaves      493    2439323 ns/op    131073 B/op   1 allocs/op
8000_leaves      246    4850361 ns/op    262144 B/op   1 allocs/op
16000_leaves     122    9826700 ns/op    516101 B/op   1 allocs/op
32000_leaves      63   19420881 ns/op   1024008 B/op   1 allocs/op
2021-12-04 15:55:01 -06:00
Dave Collins
db8c99fc64
primitives: Add core merkle tree root calcs.
This implements functions to calculate a Merkle tree root for a given
set of leaves along with associated tests.

The functions are direct ports of the functions of the same names from
blockchain/standalone.

Note that this does not include the other functions in
blockchain/standalone related to merkle root calculations from
transaction trees since the primitives package does not yet implement
a transaction type.  Those will be implemented later after a transaction
type is introduced.
2021-12-04 15:55:00 -06:00
Dave Collins
92ccbee291
primitives: Add skeleton README.md. 2021-12-04 15:49:13 -06:00
Dave Collins
6acda222a0
primitives: Add check proof of work benchmark.
The following is a comparison between the existing implementation in the
blockchain/standalone module with big integers (old) and the new
implementation (new) averaging 10 runs each:

name               old time/op     new time/op     delta
-----------------------------------------------------------------------------
CheckProofOfWork   314ns ± 1%      43ns ± 0%       -86.42%  (p=0.000 n=10+10)

name               old allocs/op   new allocs/op   delta
------------------------------------------------------------------------------
CheckProofOfWork   5.00 ± 0%       0.00            -100.00%  (p=0.000 n=10+10)
2021-12-04 15:49:13 -06:00
Dave Collins
914691581b
primitives: Add check proof of work.
This implements functions to verify a block hash is less than the target
difficulty represented by given difficulty bits and that said difficulty
is in min/max range per a proof-of-work limit along with associated
tests.

It also introduces error infrastructure consistent with the rest of the
code.

The functions are the semantic equivalent of the functions of the same
names from blockchain/standalone updated to use and accept the new
uint256 type instead of stdlib big integers.
2021-12-04 15:49:11 -06:00
Dave Collins
219ff22801
primitives: Add hash to uint256 benchmark.
The following is a comparison between the existing implementation in the
blockchain/standalone module with big integers (old) and the new
implementation (new) averaging 10 runs each:

name            old time/op     new time/op     delta
--------------------------------------------------------------------------
HashToUint256   127ns ± 3%      3ns ± 1%        -97.68%  (p=0.000 n=10+10)

name            old allocs/op   new allocs/op   delta
---------------------------------------------------------------------------
HashToUint256   2.00 ± 0%       0.00            -100.00%  (p=0.000 n=10+10)
2021-12-04 15:49:10 -06:00
Dave Collins
92d5a83f50
primitives: Add hash to uint256 conversion.
This implements a function to convert a hash to the new uint256 type
along with associated tests.

The function is the semantic equivalent of HashToBig from
blockchain/standalone updated to use and return the new uint256 type
instead of stdlib big integers.
2021-12-04 15:49:10 -06:00
Dave Collins
44204ac2ff
primitives: Add work calc benchmark.
The following is a comparison between the existing implementation in the
blockchain/standalone module with big integers (old) and the new
implementation (new) averaging 10 runs each:

name       old time/op     new time/op     delta
---------------------------------------------------------------------
CalcWork   638ns ± 1%      59ns ± 1%       -90.78%  (p=0.000 n=10+10)

name       old allocs/op   new allocs/op   delta
----------------------------------------------------------------------
CalcWork   7.00 ± 0%       0.00            -100.00%  (p=0.000 n=10+10)
2021-12-04 15:49:09 -06:00
Dave Collins
ecf6c6313e
primitives: Add work calc from diff bits.
This implements code for calculating a uint256 work value from
difficulty bits along with associated tests.

The function is the semantic equivalent of CalcWork from
blockchain/standalone updated to use and return the new uint256 type
instead of stdlib big integers.

Note that the original calculation involves a dividend of 2^256 which is
not directly representable by a uint256, so this implementation retains
the same semantics by transforming the calculation as described in
detail by the comments.
2021-12-04 15:49:08 -06:00
Dave Collins
3e7115cf64
primitives: Add diff bits conversion benchmarks.
The following is a comparison between the existing implementations in
the blockchain/standalone module with big integers (old) and the new
implementations (new) averaging 10 runs each:

name                old time/op     new time/op     delta
------------------------------------------------------------------------------
DiffBitsToUint256   158ns ± 1%      4ns ± 1%        -97.35%  (p=0.000 n=10+10)
Uint256ToDiffBits   151ns ± 2%      8ns ± 4%        -94.82%  (p=0.000 n=10+10)

name                      old allocs/op   new allocs/op   delta
-------------------------------------------------------------------------------
DiffBitsToUint256   3.00 ± 0%       0.00            -100.00%  (p=0.000 n=10+10)
Uint256ToDiffBits   2.00 ± 0%       0.00            -100.00%  (p=0.000 n=10+10)
2021-12-04 15:49:07 -06:00
Dave Collins
7acd3828e3
primitives: Add difficulty bits <-> uint256.
This implements code for converting between difficulty bits and the new
uint256 type along with associated tests.

The functions are the semantic equivalents of CompactToBig and
BigToCompact from blockchain/standalone updated to use the new uint256
type instead of stdlib big integers and renamed to DiffBitsToUint256 and
Uint256ToDiffBits, respectively.

The primary motivation for renaming the functions to specifically call
out difficulty bits instead of the shorter "Compact" is to prevent
future ambiguity with Satoshi-style variable length compact integers
that will ultimately also be available from the package.

Note that for legacy reasons, even though the difficulty bits encoding
is only used in Decred to encode unsigned 256-bit integers which
represent difficulty targets, the encoding is capable of representing
negative numbers as well as numbers much larger than the maximum value
of an unsigned 256-bit integer.  Therefore, in order to enable proper
error detection and stay consistent with legacy code, DiffBitsToUint256
returns additional flags to indicate the aforementioned conditions.
2021-12-04 15:49:04 -06:00
Dave Collins
c4564f1984
multi: Allow discrete mining with invalidated tip.
This adds additional logic to the CPU miner's discrete mining process to
detect when the block that it most recently submitted is no longer valid
to prevent a hang in that case while still providing the desired
behavior that waits for updated templates when invoked in rapid
succession.
2021-12-03 12:05:15 -06:00
Dave Collins
afe1ba5692
netsync: Rework next block download logic.
Currently, the next blocks that need to be downloaded are determined in
blockchain and returned via a new slice by using a lookahead method
along with allowing the caller to specify a map of blocks to exclude for
the blocks that have already been requested.

While this method works fine for a single peer, it does not lend itself
well to parallel block downloads.  Further, the lookahead mechanism
imposes an artificial limit on the number of outstanding requests which
is not something that it should be concerned with and it also is not
particularly efficient since it results in new allocations every time it
is queried.

Consequently, this reworks the logic such that the function in
blockchain accepts a backing array from the caller that is populated via
an allocation-free windowing mechanism and the sync manager now
maintains that array along with additional logic to detect when to
update it.  Not only is the new approach quite a bit more efficient, it
removes the artificial limits on outstanding requests so they can be
tuned as needed by the sync manager.
2021-11-24 23:53:45 -06:00
Dave Collins
4ebf8cea7a
blockchain: Correct comment typos for find fork. 2021-11-24 23:53:41 -06:00
Dave Collins
46278323c3
netsync: Contiguous hashes for initial state reqs.
This modifies the internal messaging for initial state requests to use
slices of contiguous block hashes instead of slices of pointers.
Contiguous slices produce much less heap objects that the GC needs to
scan and are better for cache locality.
2021-11-24 13:30:39 -06:00
Dave Collins
6387f762af
progresslog: Make header logging concurrent safe.
This modifies the header progress logging function to be concurrent safe
and modifies some comments to call out that the various functions are
concurrent safe.

This isn't strictly necessary with the current code because the function
is only ever called from a single goroutine in the network sync manager,
but the logger is intended to be concurrent safe and future code will
likely make use of it from multiple goroutines.
2021-11-23 17:24:58 -06:00
Ryan Staudt
f061bbff9a mining: Fix typo. 2021-11-23 17:24:36 -06:00
Ryan Staudt
cf5619a7b5 netsync: Fix misc typos. 2021-11-23 17:24:36 -06:00
Ryan Staudt
d1b1fdba52 blockchain: Reject old block vers for HFV.
This updates the latest block version for the upcoming hard fork vote
for DCP0007, DCP0008, and DCP0009 in order to reject old block versions
once a super majority of the network has upgraded.
2021-11-22 11:50:41 -06:00
Dave Collins
36fbba3e22
gcs: Prepare v3.0.0.
This updates the gcs module dependencies, the copyright year in the
files modified since the previous release, and serves as a base for
gcs/v3.0.0.

The updated direct dependencies in this commit are as follows:

- github.com/decred/dcrd/blockchain/stake/v4@v4.0.0

The full list of updated direct dependencies since the previous
gcs/v2.1.0 release are as follows:

- github.com/dchest/siphash@v1.2.2
- github.com/decred/dcrd/blockchain/stake/v4@v4.0.0
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.3
- github.com/decred/dcrd/txscript/v4@v4.0.0
- github.com/decred/dcrd/wire@v1.5.0

Finally, all modules in the repository that depend on the module are
tidied to ensure they are updated to use the latest versions hoisted
forward as a result.
2021-11-22 10:37:05 -06:00
Dave Collins
c8f4596540
docs: Update for gcs v3 module.
This updates the docs/README.md file, module hierarchy graphviz, and
module hierarchy diagram to reflect the new module version.
2021-11-22 10:34:59 -06:00
Dave Collins
025ce301a2
blockchain/stake: Prepare v4.0.0.
This updates the blockchain/stake module dependencies, the copyright
year in the files modified since the previous release, and serves as a
base for blockchain/stake/v4.0.0.

The updated direct dependencies in this commit are as follows:

- github.com/decred/dcrd/database/v3@v3.0.0
- github.com/decred/dcrd/dcrutil/v4@v4.0.0

The full list of updated direct dependencies since the previous
blockchain/stake/v3.0.0 release are as follows:

- github.com/decred/dcrd/chaincfg/chainhash@v1.0.3
- github.com/decred/dcrd/chaincfg/v3@v3.1.0
- github.com/decred/dcrd/database/v3@v3.0.0
- github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1
- github.com/decred/dcrd/dcrutil/v4@v4.0.0
- github.com/decred/dcrd/txscript/v4@v4.0.0
- github.com/decred/dcrd/wire@v1.5.0
- github.com/decred/slog@v1.2.0

The following direct dependencies are no longer required as compared to
the previous release:

- github.com/decred/dcrd/dcrec

Finally, all modules in the repository that depend on the module are
tidied to ensure they are updated to use the latest versions hoisted
forward as a result.
2021-11-21 16:09:22 -06:00
Dave Collins
9efbe8c694
docs: Update for blockchain/stake v4 module.
This updates the docs/README.md file, module hierarchy graphviz, and
module hierarchy diagram to reflect the new module version.
2021-11-21 16:09:21 -06:00
Dave Collins
45f1722f4d
stake: Rename func to identify stake cmtmnt output.
This renames IsStakeSubmissionTxOut to IsStakeCommitmentTxOut to help
avoid ambiguity with the actual "stakesubmission" output which is only
the 0th output of a stake submission transaction.
2021-11-21 16:03:03 -06:00
Dave Collins
81ae286f23
database: Prepare v3.0.0.
This updates the database module dependencies, the copyright year in the
files modified since the previous release, and serves as a base for
database/v3.0.0.

The updated direct dependencies in this commit are as follows:

- github.com/decred/dcrd/dcrutil/v4@v4.0.0
- github.com/syndtr/goleveldb@v1.0.1-0.20210819022825-2ae1ddf74ef7

The full list of updated direct dependencies since the previous
database/v2.0.2 release are as follows:

- github.com/decred/dcrd/chaincfg/chainhash@v1.0.3
- github.com/decred/dcrd/chaincfg/v3@v3.1.0
- github.com/decred/dcrd/dcrutil/v4@v4.0.0
- github.com/decred/dcrd/wire@v1.5.0
- github.com/decred/slog@v1.2.0
- github.com/syndtr/goleveldb@v1.0.1-0.20210819022825-2ae1ddf74ef7

Finally, all modules in the repository that depend on the module are
tidied to ensure they are updated to use the latest versions hoisted
forward as a result.
2021-11-19 23:32:36 -06:00
Dave Collins
5f7eb93f64
docs: Update for database v3 module.
This updates the docs/README.md file, module hierarchy graphviz, and
module hierarchy diagram to reflect the new module version.
2021-11-19 23:32:34 -06:00
Dave Collins
a01ee5d769
peer: Prepare v3.0.0.
This updates the peer module dependencies, the copyright year in the
files modified since the previous release, and serves as a base for
peer/v3.0.0.

The updated direct dependencies in this commit are as follows:

- github.com/decred/dcrd/txscript/v4@v4.0.0

The full list of updated direct dependencies since the previous
peer/v2.2.0 release are as follows:

- github.com/decred/dcrd/chaincfg/chainhash@v1.0.3
- github.com/decred/dcrd/txscript/v4@v4.0.0
- github.com/decred/dcrd/wire@v1.5.0
- github.com/decred/slog@v1.2.0

Finally, all modules in the repository that depend on the module are
tidied to ensure they are updated to use the latest versions hoisted
forward as a result.
2021-11-19 23:26:29 -06:00
Dave Collins
78d3590592
docs: Update for peer v3 module.
This updates the docs/README.md file, module hierarchy graphviz, and
module hierarchy diagram to reflect the new module version.
2021-11-19 23:26:26 -06:00
Dave Collins
8f3fd5a020
uint256: Add README.md. 2021-11-19 17:31:39 -06:00
Dave Collins
7abc0d9496
uint256: Add basic usage example.
This adds an example of calculating the result of dividing a max
unsigned 256-bit integer by a max unsigned 128-bit integer and
outputting that result in hex with leading zeros.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:31:39 -06:00
Dave Collins
3d83510579
uint256: Add conversion from stdlib big int benchmark.
The following shows the typical performance of converting a standard
library big integer that has already been reduced modulo 2^256 to a
uint256:

Uint256SetBig   26944130   44.45 ns/op   0 B/op   0 allocs/op

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:31:39 -06:00
Dave Collins
8dbc97e178
uint256: Add conversion from stdlib big int support.
This adds a convenience method for converting a standard library big
integer to a uint256 (modulo 2^256) along with associated tests to
ensure proper functionality.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:31:38 -06:00
Dave Collins
15eac536d1
uint256: Add conversion to stdlib big int benchmark.
The following shows the typical performance of converting a uint256 to a
standard library big integer using one that already exists:

Uint256PutBig   43651442   27.29 ns/op   0 B/op   0 allocs/op

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:31:38 -06:00
Dave Collins
6065dd8c4d
uint256: Add conversion to stdlib big int support.
This adds convenience methods for converting a uint256 to a standard
library big integer along with associated tests to ensure proper
functionality.

It includes a method that allows an existing big integer to be reused
thereby potentially saving allocations as well as a method that returns
a new big integer.  The latter is often more convenient to use, but is
also virtually guaranteed to cause an allocation.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:31:37 -06:00
Dave Collins
4653cbc774
uint256: Add text formatting benchmarks.
The following is a comparison between stdlib big integers (old) and the
specialized type (new) averaging 10 runs each:

name             old time/op     new time/op     delta
---------------------------------------------------------------------------
Text/base_2      579ns ± 3%      496ns ± 2%      -14.37%  (p=0.000 n=10+10)
Text/base_8      266ns ± 1%      227ns ± 1%      -14.58%  (p=0.000 n=10+10)
Text/base_10     536ns ± 1%      458ns ± 2%      -14.58%  (p=0.000 n=10+10)
Text/base_16     205ns ± 2%      180ns ± 4%      -11.90%  (p=0.000 n=10+10)
Format/base_2    987ns ±15%      852ns ± 2%      -13.64%  (p=0.000 n=10+10)
Format/base_8    620ns ± 6%      544ns ± 3%      -12.31%  (p=0.000 n=10+10)
Format/base_10   888ns ± 1%      726ns ± 1%      -18.25%  (p=0.000 n=10+10)
Format/base_16   565ns ± 1%      449ns ± 1%      -20.41%  (p=0.000 n=10+10)

name             old allocs/op   new allocs/op   delta
--------------------------------------------------------------------------
Text/base_2      2.00 ± 0%       2.00 ± 0%         ~     (all equal)
Text/base_8      2.00 ± 0%       2.00 ± 0%         ~     (all equal)
Text/base_10     3.00 ± 0%       2.00 ± 0%      -33.33%  (p=0.000 n=10+10)
Text/base_16     2.00 ± 0%       2.00 ± 0%         ~     (all equal)
Format/base_2    5.00 ± 0%       3.00 ± 0%      -40.00%  (p=0.000 n=10+10)
Format/base_8    5.00 ± 0%       3.00 ± 0%      -40.00%  (p=0.000 n=10+10)
Format/base_10   6.00 ± 0%       3.00 ± 0%      -50.00%  (p=0.000 n=10+10)
Format/base_16   5.00 ± 0%       3.00 ± 0%      -40.00%  (p=0.000 n=10+10)

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:19 -06:00
Dave Collins
4f7eaa879f
uint256: Add text formatting support.
This adds full support for formatting a uint256 along with associated
tests to ensure proper functionality.

It includes a fmt.Formatter that supports the full suite of the fmt
package format flags for integral types, a fmt.Stringer, and a separate
Text method that accepts an output base directly and produces the
relevant output with fewer allocations than using the standard fmt
methods.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:19 -06:00
Dave Collins
37b4c65dcd
uint256: Add bit length benchmarks.
The following is a comparison between stdlib big integers (old) and the
specialized type (new) averaging 10 runs each:

name       old time/op     new time/op     delta
---------------------------------------------------------------------
bits_64    2.24ns ± 1%     1.94ns ± 3%     -13.04%  (p=0.000 n=10+10)
bits_128   2.25ns ± 2%     1.96ns ± 2%     -13.17%  (p=0.000 n=10+10)
bits_192   2.25ns ± 1%     1.60ns ± 1%     -28.65%  (p=0.000 n=10+10)
bits_255   2.26ns ± 2%     1.61ns ± 1%     -29.04%  (p=0.000 n=10+10)

name       old allocs/op   new allocs/op   delta
------------------------------------------------------------
bits_64    0.00            0.00            ~     (all equal)
bits_128   0.00            0.00            ~     (all equal)
bits_192   0.00            0.00            ~     (all equal)
bits_255   0.00            0.00            ~     (all equal)

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:18 -06:00
Dave Collins
c0854f6f17
uint256: Add bit length support.
This adds support for determining the minimum number of bits required to
represent the current value of a uint256 along with associated tests to
ensure proper functionality.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:18 -06:00
Dave Collins
7ba863dff6
uint256: Add bitwise xor benchmarks.
The following is a comparison between stdlib big integers (old) and the
specialized type (new) averaging 10 runs each:

name   old time/op     new time/op     delta
-----------------------------------------------------------------
Xor    17.9ns ± 5%     3.4ns ± 6%      -80.91%  (p=0.000 n=10+10)

name   old allocs/op   new allocs/op   delta
--------------------------------------------------------
Xor    0.00            0.00            ~     (all equal)

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:18 -06:00
Dave Collins
d17692072d
uint256: Add bitwise xor support.
This adds support to compute the bitwise xor of two uint256s along with
associated tests to ensure proper functionality.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:17 -06:00
Dave Collins
275afa2272
uint256: Add bitwise and benchmarks.
The following is a comparison between stdlib big integers (old) and the
specialized type (new) averaging 10 runs each:

name   old time/op     new time/op     delta
-----------------------------------------------------------------
And    16.7ns ± 5%     3.4ns ± 6%      -79.93%  (p=0.000 n=10+10)

name   old allocs/op   new allocs/op   delta
--------------------------------------------------------
And    0.00            0.00            ~     (all equal)

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:17 -06:00
Dave Collins
97bdac8ad4
uint256: Add bitwise and support.
This adds support to compute the bitwise and of two uint256s along with
associated tests to ensure proper functionality.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:16 -06:00
Dave Collins
33601a06d3
uint256: Add bitwise or benchmarks.
The following is a comparison between stdlib big integers (old) and the
specialized type (new) averaging 10 runs each:

name   old time/op     new time/op     delta
-----------------------------------------------------------------
Or     17.9ns ± 5%     3.4ns ± 6%      -80.94%  (p=0.000 n=10+10)

name   old allocs/op   new allocs/op   delta
--------------------------------------------------------
Or     0.00            0.00            ~     (all equal)

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:16 -06:00
Dave Collins
269eee2069
uint256: Add bitwise or support.
This adds support to compute the bitwise or of two uint256s along with
associated tests to ensure proper functionality.

This is part of a series of commits to fully implement the uint256
package.
2021-11-19 17:04:15 -06:00