Skip to content

Commit e693793

Browse files
yonggewangahmed82
authored andcommitted
squash the commits
Update LICENSE Signed-off-by: Ahmed Al Salih <ahmed82@users.noreply.github.com> Signed-off-by: Yongge Wang <yongge.wang@gmail.com>
0 parents  commit e693793

File tree

295 files changed

+80988
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

295 files changed

+80988
-0
lines changed

.travis.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
language: go
2+
go:
3+
- 1.13.x
4+
5+
before_install:
6+
- go get -t -v ./...
7+
8+
install:
9+
- go get github.com/yonggewang/bdls/
10+
11+
script:
12+
- go test -v -coverprofile=coverage.txt.tmp -covermode=atomic -timeout 12h -run "(Verify)|(Full20Participants)|(Propose)|(Round)|(Commit)|(Lock)|(Stage)"
13+
- cat coverage.txt.tmp | grep -v "pb.go" > coverage.txt
14+
- rm coverage.txt.tmp
15+
16+
after_success:
17+
- bash <(curl -s https://codecov.io/bash)

LICENSE

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
Apache License
2+
Version 2.0, January 2004
3+
http://www.apache.org/licenses/
4+
5+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6+
7+
1. Definitions.
8+
9+
"License" shall mean the terms and conditions for use, reproduction,
10+
and distribution as defined by Sections 1 through 9 of this document.
11+
12+
"Licensor" shall mean the copyright owner or entity authorized by
13+
the copyright owner that is granting the License.
14+
15+
"Legal Entity" shall mean the union of the acting entity and all
16+
other entities that control, are controlled by, or are under common
17+
control with that entity. For the purposes of this definition,
18+
"control" means (i) the power, direct or indirect, to cause the
19+
direction or management of such entity, whether by contract or
20+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
21+
outstanding shares, or (iii) beneficial ownership of such entity.
22+
23+
"You" (or "Your") shall mean an individual or Legal Entity
24+
exercising permissions granted by this License.
25+
26+
"Source" form shall mean the preferred form for making modifications,
27+
including but not limited to software source code, documentation
28+
source, and configuration files.
29+
30+
"Object" form shall mean any form resulting from mechanical
31+
transformation or translation of a Source form, including but
32+
not limited to compiled object code, generated documentation,
33+
and conversions to other media types.
34+
35+
"Work" shall mean the work of authorship, whether in Source or
36+
Object form, made available under the License, as indicated by a
37+
copyright notice that is included in or attached to the work
38+
(an example is provided in the Appendix below).
39+
40+
"Derivative Works" shall mean any work, whether in Source or Object
41+
form, that is based on (or derived from) the Work and for which the
42+
editorial revisions, annotations, elaborations, or other modifications
43+
represent, as a whole, an original work of authorship. For the purposes
44+
of this License, Derivative Works shall not include works that remain
45+
separable from, or merely link (or bind by name) to the interfaces of,
46+
the Work and Derivative Works thereof.
47+
48+
"Contribution" shall mean any work of authorship, including
49+
the original version of the Work and any modifications or additions
50+
to that Work or Derivative Works thereof, that is intentionally
51+
submitted to Licensor for inclusion in the Work by the copyright owner
52+
or by an individual or Legal Entity authorized to submit on behalf of
53+
the copyright owner. For the purposes of this definition, "submitted"
54+
means any form of electronic, verbal, or written communication sent
55+
to the Licensor or its representatives, including but not limited to
56+
communication on electronic mailing lists, source code control systems,
57+
and issue tracking systems that are managed by, or on behalf of, the
58+
Licensor for the purpose of discussing and improving the Work, but
59+
excluding communication that is conspicuously marked or otherwise
60+
designated in writing by the copyright owner as "Not a Contribution."
61+
62+
"Contributor" shall mean Licensor and any individual or Legal Entity
63+
on behalf of whom a Contribution has been received by Licensor and
64+
subsequently incorporated within the Work.
65+
66+
2. Grant of Copyright License. Subject to the terms and conditions of
67+
this License, each Contributor hereby grants to You a perpetual,
68+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69+
copyright license to reproduce, prepare Derivative Works of,
70+
publicly display, publicly perform, sublicense, and distribute the
71+
Work and such Derivative Works in Source or Object form.
72+
73+
3. Grant of Patent License. Subject to the terms and conditions of
74+
this License, each Contributor hereby grants to You a perpetual,
75+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76+
(except as stated in this section) patent license to make, have made,
77+
use, offer to sell, sell, import, and otherwise transfer the Work,
78+
where such license applies only to those patent claims licensable
79+
by such Contributor that are necessarily infringed by their
80+
Contribution(s) alone or by combination of their Contribution(s)
81+
with the Work to which such Contribution(s) was submitted. If You
82+
institute patent litigation against any entity (including a
83+
cross-claim or counterclaim in a lawsuit) alleging that the Work
84+
or a Contribution incorporated within the Work constitutes direct
85+
or contributory patent infringement, then any patent licenses
86+
granted to You under this License for that Work shall terminate
87+
as of the date such litigation is filed.
88+
89+
4. Redistribution. You may reproduce and distribute copies of the
90+
Work or Derivative Works thereof in any medium, with or without
91+
modifications, and in Source or Object form, provided that You
92+
meet the following conditions:
93+
94+
(a) You must give any other recipients of the Work or
95+
Derivative Works a copy of this License; and
96+
97+
(b) You must cause any modified files to carry prominent notices
98+
stating that You changed the files; and
99+
100+
(c) You must retain, in the Source form of any Derivative Works
101+
that You distribute, all copyright, patent, trademark, and
102+
attribution notices from the Source form of the Work,
103+
excluding those notices that do not pertain to any part of
104+
the Derivative Works; and
105+
106+
(d) If the Work includes a "NOTICE" text file as part of its
107+
distribution, then any Derivative Works that You distribute must
108+
include a readable copy of the attribution notices contained
109+
within such NOTICE file, excluding those notices that do not
110+
pertain to any part of the Derivative Works, in at least one
111+
of the following places: within a NOTICE text file distributed
112+
as part of the Derivative Works; within the Source form or
113+
documentation, if provided along with the Derivative Works; or,
114+
within a display generated by the Derivative Works, if and
115+
wherever such third-party notices normally appear. The contents
116+
of the NOTICE file are for informational purposes only and
117+
do not modify the License. You may add Your own attribution
118+
notices within Derivative Works that You distribute, alongside
119+
or as an addendum to the NOTICE text from the Work, provided
120+
that such additional attribution notices cannot be construed
121+
as modifying the License.
122+
123+
You may add Your own copyright statement to Your modifications and
124+
may provide additional or different license terms and conditions
125+
for use, reproduction, or distribution of Your modifications, or
126+
for any such Derivative Works as a whole, provided Your use,
127+
reproduction, and distribution of the Work otherwise complies with
128+
the conditions stated in this License.
129+
130+
5. Submission of Contributions. Unless You explicitly state otherwise,
131+
any Contribution intentionally submitted for inclusion in the Work
132+
by You to the Licensor shall be under the terms and conditions of
133+
this License, without any additional terms or conditions.
134+
Notwithstanding the above, nothing herein shall supersede or modify
135+
the terms of any separate license agreement you may have executed
136+
with Licensor regarding such Contributions.
137+
138+
6. Trademarks. This License does not grant permission to use the trade
139+
names, trademarks, service marks, or product names of the Licensor,
140+
except as required for reasonable and customary use in describing the
141+
origin of the Work and reproducing the content of the NOTICE file.
142+
143+
7. Disclaimer of Warranty. Unless required by applicable law or
144+
agreed to in writing, Licensor provides the Work (and each
145+
Contributor provides its Contributions) on an "AS IS" BASIS,
146+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147+
implied, including, without limitation, any warranties or conditions
148+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149+
PARTICULAR PURPOSE. You are solely responsible for determining the
150+
appropriateness of using or redistributing the Work and assume any
151+
risks associated with Your exercise of permissions under this License.
152+
153+
8. Limitation of Liability. In no event and under no legal theory,
154+
whether in tort (including negligence), contract, or otherwise,
155+
unless required by applicable law (such as deliberate and grossly
156+
negligent acts) or agreed to in writing, shall any Contributor be
157+
liable to You for damages, including any direct, indirect, special,
158+
incidental, or consequential damages of any character arising as a
159+
result of this License or out of the use or inability to use the
160+
Work (including but not limited to damages for loss of goodwill,
161+
work stoppage, computer failure or malfunction, or any and all
162+
other commercial damages or losses), even if such Contributor
163+
has been advised of the possibility of such damages.
164+
165+
9. Accepting Warranty or Additional Liability. While redistributing
166+
the Work or Derivative Works thereof, You may choose to offer,
167+
and charge a fee for, acceptance of support, warranty, indemnity,
168+
or other liability obligations and/or rights consistent with this
169+
License. However, in accepting such obligations, You may act only
170+
on Your own behalf and on Your sole responsibility, not on behalf
171+
of any other Contributor, and only if You agree to indemnify,
172+
defend, and hold each Contributor harmless for any liability
173+
incurred by, or claims asserted against, such Contributor by reason
174+
of your accepting any such warranty or additional liability.
175+
176+
END OF TERMS AND CONDITIONS
177+
178+
APPENDIX: How to apply the Apache License to your work.
179+
180+
To apply the Apache License to your work, attach the following
181+
boilerplate notice, with the fields enclosed by brackets "[]"
182+
replaced with your own identifying information. (Don't include
183+
the brackets!) The text should be enclosed in the appropriate
184+
comment syntax for the file format. We also recommend that a
185+
file or class name and description of purpose be included on the
186+
same "printed page" as the copyright notice for easier
187+
identification within third-party archives.
188+
189+
Copyright [yyyy] [name of copyright owner]
190+
191+
Licensed under the Apache License, Version 2.0 (the "License");
192+
you may not use this file except in compliance with the License.
193+
You may obtain a copy of the License at
194+
195+
http://www.apache.org/licenses/LICENSE-2.0
196+
197+
Unless required by applicable law or agreed to in writing, software
198+
distributed under the License is distributed on an "AS IS" BASIS,
199+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200+
See the License for the specific language governing permissions and
201+
limitations under the License.

README.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# BDLS
2+
Efficient BFT in partial synchronous networks
3+
4+
[![GoDoc][1]][2] [![License][3]][4] [![Build Status][5]][6] [![Go Report Card][7]][8] [![Coverage Statusd][9]][10] [![Sourcegraph][11]][12]
5+
6+
[1]: https://godoc.org/github.com/Sperax/bdls?status.svg
7+
[2]: https://godoc.org/github.com/Sperax/bdls
8+
[3]: https://img.shields.io/github/license/Sperax/bdls
9+
[4]: LICENSE
10+
[5]: https://travis-ci.org/Sperax/bdls.svg?branch=master
11+
[6]: https://travis-ci.org/Sperax/bdls
12+
[7]: https://goreportcard.com/badge/github.com/Sperax/bdls?bdls
13+
[8]: https://goreportcard.com/report/github.com/Sperax/bdls
14+
[9]: https://codecov.io/gh/Sperax/bdls/branch/master/graph/badge.svg
15+
[10]: https://codecov.io/gh/Sperax/bdls
16+
[11]: https://sourcegraph.com/github.com/Sperax/bdls/-/badge.svg
17+
[12]: https://sourcegraph.com/github.com/Sperax/bdls?badge
18+
19+
# BDLS Consensus
20+
21+
## Introduction
22+
23+
BDLS is an innovative BFT consensus algorithm that features safety and liveness by
24+
presenting a mathematically proven secure BFT protocol that is resilient in open networks such as
25+
the Internet. BDLS overcomes many problems, such as the deadlock problem caused by unreliable
26+
p2p/broadcast channels. These problems are all very relevant to existing realistic open
27+
network scenarios, and are the focus of extensive work in improving Internet security, but it
28+
is an area largely ignored by most in mainstream BFT protocol design.
29+
(Paper: https://eprint.iacr.org/2019/1460.pdf)
30+
31+
For this library, to make the runtime behavior of consensus algorithm predictable as function:
32+
y = f(x, t), where 'x' is the message it received, and 't' is the time while being called,
33+
then'y' is the deterministic status of consensus after 'x' and 't' applied to 'f',
34+
it has been designed in a deterministic scheme, without parallel computing, networking, and
35+
the correctness of program implementation can be proven with proper test cases.
36+
37+
## License
38+
39+
The source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the [LICENSE](LICENSE) file.
40+
41+
## Features
42+
43+
1. Pure algorithm implementation in deterministic and predictable behavior, easily to be integrated into existing projects, refer to [DFA](https://en.wikipedia.org/wiki/Deterministic_finite_automaton) for more.
44+
2. Well-tested on various platforms with complicated cases.
45+
3. Auto back-off under heavy payload, guaranteed finalization(worst case gurantee).
46+
4. Easy integratation into Blockchain & non-Blockchain consensus, like [WAL replication](https://en.wikipedia.org/wiki/Replication_(computing)#Database_replication) in database.
47+
5. Builtin network emulation for various network latency with comprehensive statistics.
48+
49+
## Documentation
50+
51+
For complete documentation, see the associated [Godoc](https://pkg.go.dev/github.com/Sperax/bdls).
52+
53+
54+
## Install BDLS on Ubuntu Server 20.04
55+
56+
```
57+
sudo apt-get update
58+
sudo apt-get -y upgrade
59+
sudo apt-get install autoconf automake libtool curl make g++ unzip
60+
cd /tmp
61+
wget https://go.dev/dl/go1.17.5.linux-amd64.tar.gz
62+
sudo tar -xvf go1.17.5.linux-amd64.tar.gz
63+
sudo mv go /usr/local
64+
cd
65+
echo 'export GOROOT=/usr/local/go' >> .profile
66+
echo 'export GOPATH=$HOME/go' >> .profile
67+
echo 'export PATH=$GOPATH/bin:$GOROOT/bin:$PATH' >> .profile
68+
source ~/.profile
69+
go version
70+
go env
71+
git clone https://github.com/yonggewang/bdls.git
72+
cd bdls/
73+
git checkout master
74+
cd cmd/emucon/
75+
go build .
76+
./emucon help genkeys
77+
./emucon genkeys --count 4
78+
79+
[open four terminals to run four participants. if you log to remote Linux,
80+
you may use tmux commands. In tmux, you can switch termian using "ctrl+b d"
81+
and use "tmux attach -t 0" to enter the terminal. Use "tmux list-session"
82+
to check the current active terminals]
83+
84+
85+
./emucon run --id 0 --listen ":4680
86+
./emucon run --id 1 --listen ":4681"
87+
./emucon run --id 2 --listen ":4682"
88+
./emucon run --id 3 --listen ":4683"
89+
90+
cd ../..
91+
go test -v -cpuprofile=cpu.out -memprofile=mem.out -timeout 2h
92+
```
93+
## Regenerate go.mod and go.sum
94+
```
95+
rm go.*
96+
go mod init github.com/yonggewang/bdls
97+
go mod tidy
98+
go mod vendor
99+
```
100+
101+
See benchmark ourput at: [AMD-NORMAL.TXT](benchmarks/AMD-NORMAL.TXT) and [PI4-OVERLOAD.TXT](benchmarks/PI4-OVERLOAD.TXT)
102+
103+
## Specification
104+
105+
1. Consensus messages are specified in [message.proto](message.proto), users of this library can encapsulate this message in a carrier message, like gossip in TCP.
106+
2. Consensus algorithm is **NOT** thread-safe, it **MUST** be protected by some synchronization mechanism, like `sync.Mutex` or `chan` + `goroutine`.
107+
108+
## Usage
109+
110+
1. A testing IPC peer -- [ipc_peer.go](ipc_peer.go)
111+
2. A testing TCP node -- [TCP based Consensus Emualtor](cmd/emucon)
112+
113+
## Status
114+
115+
On-going

agent-tcp/doc.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Package agent-tcp implements a TCP based agent to participate in consensus
2+
// Challenge-Response scheme has been adopted to do interactive authentication
3+
package agent

agent-tcp/ecdh.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// BSD 3-Clause License
2+
//
3+
// Copyright (c) 2020, Sperax
4+
// All rights reserved.
5+
//
6+
// Redistribution and use in source and binary forms, with or without
7+
// modification, are permitted provided that the following conditions are met:
8+
//
9+
// 1. Redistributions of source code must retain the above copyright notice, this
10+
// list of conditions and the following disclaimer.
11+
//
12+
// 2. Redistributions in binary form must reproduce the above copyright notice,
13+
// this list of conditions and the following disclaimer in the documentation
14+
// and/or other materials provided with the distribution.
15+
//
16+
// 3. Neither the name of the copyright holder nor the names of its
17+
// contributors may be used to endorse or promote products derived from
18+
// this software without specific prior written permission.
19+
//
20+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23+
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24+
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26+
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27+
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28+
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30+
31+
package agent
32+
33+
import (
34+
"crypto/ecdsa"
35+
"math/big"
36+
)
37+
38+
func ECDH(publicKey *ecdsa.PublicKey, key *ecdsa.PrivateKey) *big.Int {
39+
secret, _ := key.Curve.ScalarMult(publicKey.X, publicKey.Y, key.D.Bytes())
40+
return secret
41+
}

0 commit comments

Comments
 (0)