Skip to content

Commit 00575f7

Browse files
sleepdefic1tfaustbrian
authored andcommitted
refactor(configuration): Support Bridgechains & Custom Configurations (#105)
The current implementation only allows use with Devnet unless values are manually changed in `/src`. This PR enables network configuration via the public api. (Devnet, Mainnet, Testnet, and Custom Networks (bridgechains). Specifically this PR does the following: - Creates a Configuration class. - Creates Fee and Network Manager children for the Configuration class. - Allows passing a `Configuration to` Transaction Builder with a default value of `Devnet` & `StaticFees` (non-breaking). - Adds a FeePolicy-type. - Adds a Fee class (container for fee policies). - Adds a Networks class (container for preset networks). - Updates the TransactionTypes enum. - Improves the `Network` class and Network implementions. - Updates the `Slot` class to reflect changes (non-breaking). - Updates Transaction-related classes to reflect updates (non-breaking). - Adds tests for all changes. - Updates the Arduino IDE script. - Updates `.ino` Arduino sketches with Configuration examples. - Updates documentation with Configuration examples. - Updates the `keywords.txt` file to reflect changes. - Updates the changelog. - Updates version to `v.0.6.0`.
1 parent ed0ab57 commit 00575f7

69 files changed

Lines changed: 1601 additions & 1002 deletions

Some content is hidden

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

.circleci/script_arduino.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ mv ~/project/* ~/Arduino/libraries/cpp-crypto
77

88
arduino-cli lib install "ArduinoJson@6.10.0"
99
arduino-cli lib install "BIP66"
10+
arduino-cli lib install "micro-ecc"
1011

1112
arduino-cli compile --output temp.bin -b esp32:esp32:esp32 ~/Arduino/libraries/cpp-crypto/examples/arduino/ESP32/ESP32.ino --debug

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
66
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
77

8-
## Unreleased
8+
## [0.6.0] - 2019-07-01
9+
10+
### Added
11+
12+
- added Bridgechain support ([#105])
913

1014
### Changed
1115

docs/cpp.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,79 @@ This project is still under development. This page will get more content as the
1616
* [macOS >= 10.10](#OS)
1717
* [Windows >= 7](#OS)
1818

19+
### ARK Transactions
20+
21+
#### Devnet
22+
23+
```cpp
24+
const auto DevnetTransaction = Builder::buildTransfer(
25+
"D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib",
26+
100000000ULL,
27+
"this is a devnet transaction",
28+
"this is a top secret passphrase",
29+
"this is a top secret passphrase too");
30+
```
31+
32+
#### Mainnet
33+
34+
```cpp
35+
const Configuration MainnetConfiguration(Networks::Mainnet());
36+
37+
const auto MainnetTransaction = Builder::buildTransfer(
38+
"D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib",
39+
100000000ULL,
40+
"this is a mainnet transaction",
41+
"this is a top secret passphrase",
42+
"this is a top secret passphrase too",
43+
MainnetConfiguration);
44+
```
45+
46+
#### BridgeChain Transaction
47+
48+
```cpp
49+
static const Network MyBridgechainNetwork = {
50+
"16c891512149d6d3ff1b70e65900936140bf853a4ae79b5515157981dcc706df",
51+
1, 0x53, 0xaa,
52+
"2019-04-12T13:00:00.000Z"
53+
};
54+
55+
const Configuration MyBridgechainConfiguration(MyBridgechainNetwork);
56+
57+
const auto MyBridgechainTransaction = Builder::buildTransfer(
58+
"D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib",
59+
100000000ULL,
60+
"this is a custom bridgechain transaction",
61+
"this is a top secret passphrase",
62+
"this is a top secret passphrase too",
63+
MyBridgechainConfiguration);
64+
```
65+
66+
67+
#### With custom Fees
68+
69+
```cpp
70+
static const Network MyBridgechainNetwork = {
71+
"16c891512149d6d3ff1b70e65900936140bf853a4ae79b5515157981dcc706df",
72+
1, 0x53, 0xaa,
73+
"2019-04-12T13:00:00.000Z"
74+
};
75+
76+
const FeePolicy MyCustomFees = {
77+
900000000ULL, 800000000ULL, 700000000ULL, 600000000ULL, 500000000ULL,
78+
400000000ULL, 300000000ULL, 200000000ULL, 100000000ULL, 0ULL
79+
};
80+
81+
ßconst Configuration MyBridgechainConfiguration(MyBridgechainNetwork,
82+
MyCustomFees);
83+
84+
const auto MyBridgechainTransaction = Builder::buildTransfer(
85+
"D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib",
86+
100000000ULL,
87+
"",
88+
"this is a top secret passphrase",
89+
"",
90+
MyBridgechainConfiguration);
91+
```
1992
2093
### Sign
2194

examples/arduino/ESP32/ESP32.ino

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,40 @@
3131
/****************************************/
3232

3333
void checkCrypto() {
34+
35+
/**
36+
* Create a BridgeChain transaction, tailored for your custom network.
37+
*/
38+
static const Network MyBridgechainNetwork = {
39+
"16c891512149d6d3ff1b70e65900936140bf853a4ae79b5515157981dcc706df",
40+
1, 0x53, 0xaa,
41+
"2019-04-12T13:00:00.000Z"
42+
};
43+
44+
const Configuration MyBridgechainConfiguration(MyBridgechainNetwork);
45+
46+
auto myBridgechainTransaction = Builder::buildTransfer(
47+
"D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib",
48+
100000000ULL,
49+
"this is a custom bridgechain transaction",
50+
"this is a top secret passphrase",
51+
"this is a top secret passphrase too",
52+
MyBridgechainConfiguration);
53+
54+
Serial.print("\nBridgechain Transaction: ");
55+
Serial.println(myBridgechainTransaction.toJson().c_str());
56+
57+
/**/
58+
59+
/********************/
60+
3461
/**
3562
* This is how you can check the default 'Network' "Transaction 'Fees' by type.
3663
* In this example, it should return a 'uint64_t' integer of '10000000' as the default 'Fee' for a 'Transaction' of 'Type' '0'.
3764
*/
38-
Ark::Crypto::Configuration::Fee fee;
39-
unsigned long typeZeroTransactionFee = fee.get(0);
40-
Serial.print("\n Type 0 default Transaction Fee: ");
65+
Configuration config;
66+
unsigned long typeZeroTransactionFee = config.getFee(0);
67+
Serial.print("\nType 0 default Transaction Fee: ");
4168
Serial.println(typeZeroTransactionFee); // The response is a 'uint64_t' integer.
4269

4370
/**/

examples/arduino/ESP8266/ESP8266.ino

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,39 @@
3131
/****************************************/
3232

3333
void checkCrypto() {
34+
/**
35+
* Create a BridgeChain transaction, tailored for your custom network.
36+
*/
37+
static const Network MyBridgechainNetwork = {
38+
"16c891512149d6d3ff1b70e65900936140bf853a4ae79b5515157981dcc706df",
39+
1, 0x53, 0xaa,
40+
"2019-04-12T13:00:00.000Z"
41+
};
42+
43+
const Configuration MyBridgechainConfiguration(MyBridgechainNetwork);
44+
45+
auto myBridgechainTransaction = Builder::buildTransfer(
46+
"D61mfSggzbvQgTUe6JhYKH2doHaqJ3Dyib",
47+
100000000ULL,
48+
"this is a custom bridgechain transaction",
49+
"this is a top secret passphrase",
50+
"this is a top secret passphrase too",
51+
MyBridgechainConfiguration);
52+
53+
Serial.print("\nBridgechain Transaction: ");
54+
Serial.println(myBridgechainTransaction.toJson().c_str());
55+
56+
/**/
57+
58+
/********************/
59+
3460
/**
3561
* This is how you can check the default 'Network' "Transaction 'Fees' by type.
3662
* In this example, it should return a 'uint64_t' integer of '10000000' as the default 'Fee' for a 'Transaction' of 'Type' '0'.
3763
*/
38-
Ark::Crypto::Configuration::Fee fee;
39-
unsigned long typeZeroTransactionFee = fee.get(0);
40-
Serial.print("\n Type 0 default Transaction Fee: ");
64+
Configuration config;
65+
unsigned long typeZeroTransactionFee = config.getFee(0);
66+
Serial.print("\nType 0 default Transaction Fee: ");
4167
Serial.println(typeZeroTransactionFee); // The response is a 'uint64_t' integer.
4268

4369
/**/

extras/ARDUINO_IDE.sh

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,20 @@ EXTRAS_BACKUP_DIR=${EXTRAS_DIR}/BACKUP
3838
SRC_LIB_DIR=${SRC_DIR}/lib
3939
EXTRAS_LIB_DIR=${EXTRAS_BACKUP_DIR}/lib
4040

41-
EXTRAS_IDENTITIES_DIR=${EXTRAS_BACKUP_DIR}/identities
41+
SRC_COMMON_DIR=${SRC_DIR}/common
42+
INCLUDE_COMMON_DIR=${INCLUDE_CRYPTO_DIR}/common
4243

43-
INCLUDE_CONFIGURATION_DIR=${INCLUDE_CRYPTO_DIR}/configuration
44-
SRC_CONFIGURATION_DIR=${SRC_DIR}/configuration
44+
SRC_DEFAULTS_DIR=${SRC_DIR}/defaults
45+
INCLUDE_DEFAULTS_DIR=${INCLUDE_CRYPTO_DIR}/defaults
4546

46-
INCLUDE_ENUMS_DIR=${INCLUDE_CRYPTO_DIR}/enums
47-
SRC_ENUMS_DIR=${SRC_DIR}/enums
48-
49-
INCLUDE_HELPERS_DIR=${INCLUDE_CRYPTO_DIR}/helpers
5047
SRC_HELPERS_DIR=${SRC_DIR}/helpers
48+
INCLUDE_HELPERS_DIR=${INCLUDE_CRYPTO_DIR}/helpers
5149

52-
INCLUDE_ENCODING_DIR=${INCLUDE_HELPERS_DIR}/encoding
5350
SRC_ENCODING_DIR=${SRC_HELPERS_DIR}/encoding
51+
INCLUDE_ENCODING_DIR=${INCLUDE_HELPERS_DIR}/encoding
5452

55-
INCLUDE_IDENTITIES_DIR=${INCLUDE_CRYPTO_DIR}/identities
5653
SRC_IDENTITIES_DIR=${SRC_DIR}/identities
54+
INCLUDE_IDENTITIES_DIR=${INCLUDE_CRYPTO_DIR}/identities
5755

5856
INCLUDE_NETWORKS_DIR=${INCLUDE_CRYPTO_DIR}/networks
5957
SRC_NETWORKS_DIR=${SRC_DIR}/networks
@@ -100,16 +98,15 @@ if [[ -d ${INCLUDE_DIR} ]]; then
10098
echo -e "Moving 'arkCrypto.h' to 'src' directory.\n"
10199
mv ${INCLUDE_CRYPTO_DIR}/arkCrypto.h ${SRC_DIR}
102100

103-
echo -e "Moving 'configuration' headers.\n"
104-
mv ${INCLUDE_CONFIGURATION_DIR}/fee.h ${SRC_CONFIGURATION_DIR}
105-
mv ${INCLUDE_CONFIGURATION_DIR}/network.h ${SRC_CONFIGURATION_DIR}
106-
107-
echo "Creating 'enums' folder 🗂"
108-
mkdir ${SRC_ENUMS_DIR}
101+
echo -e "Moving 'common' headers.\n"
102+
mv ${INCLUDE_COMMON_DIR}/configuration.hpp ${SRC_COMMON_DIR}
103+
mv ${INCLUDE_COMMON_DIR}/fee_policy.hpp ${SRC_COMMON_DIR}
104+
mv ${INCLUDE_COMMON_DIR}/network.hpp ${SRC_COMMON_DIR}
109105

110-
echo -e "Moving 'enums' headers.\n"
111-
mv ${INCLUDE_ENUMS_DIR}/fees.h ${SRC_ENUMS_DIR}
112-
mv ${INCLUDE_ENUMS_DIR}/types.h ${SRC_ENUMS_DIR}
106+
echo -e "Moving 'defaults' headers.\n"
107+
mv ${INCLUDE_DEFAULTS_DIR}/fee_policies.hpp ${SRC_DEFAULTS_DIR}
108+
mv ${INCLUDE_DEFAULTS_DIR}/static_fees.hpp ${SRC_DEFAULTS_DIR}
109+
mv ${INCLUDE_DEFAULTS_DIR}/transaction_types.hpp ${SRC_DEFAULTS_DIR}
113110

114111
echo -e "Moving 'helpers' headers.\n"
115112
mkdir ${SRC_ENCODING_DIR}
@@ -122,24 +119,25 @@ if [[ -d ${INCLUDE_DIR} ]]; then
122119
mv ${INCLUDE_IDENTITIES_DIR}/wif.h ${SRC_IDENTITIES_DIR}
123120

124121
echo -e "Moving 'networks' headers.\n"
125-
mv ${INCLUDE_NETWORKS_DIR}/abstractnetwork.h ${SRC_NETWORKS_DIR}
126-
mv ${INCLUDE_NETWORKS_DIR}/devnet.h ${SRC_NETWORKS_DIR}
127-
mv ${INCLUDE_NETWORKS_DIR}/mainnet.h ${SRC_NETWORKS_DIR}
128-
mv ${INCLUDE_NETWORKS_DIR}/testnet.h ${SRC_NETWORKS_DIR}
122+
mv ${INCLUDE_NETWORKS_DIR}/networks.hpp ${SRC_NETWORKS_DIR}
123+
mv ${INCLUDE_NETWORKS_DIR}/devnet.hpp ${SRC_NETWORKS_DIR}
124+
mv ${INCLUDE_NETWORKS_DIR}/mainnet.hpp ${SRC_NETWORKS_DIR}
125+
mv ${INCLUDE_NETWORKS_DIR}/testnet.hpp ${SRC_NETWORKS_DIR}
129126

130127
echo -e "Moving 'transactions' headers.\n"
131128
mv ${INCLUDE_TRANSACTIONS_DIR}/builder.h ${SRC_TRANSACTIONS_DIR}
132129
mv ${INCLUDE_TRANSACTIONS_DIR}/deserializer.h ${SRC_TRANSACTIONS_DIR}
133130
mv ${INCLUDE_TRANSACTIONS_DIR}/serializer.h ${SRC_TRANSACTIONS_DIR}
134131
mv ${INCLUDE_TRANSACTIONS_DIR}/transaction.h ${SRC_TRANSACTIONS_DIR}
135132

136-
echo -e "Backing up, moving, and removing relevant modules from the 'lib' directory.\n"
133+
echo -e "Backing up, moving, and removing dependencies from the 'src/lib' directory.\n"
134+
mkdir ${EXTRAS_BACKUP_DIR}
137135
mv ${SRC_LIB_DIR}/ArduinoJson ${EXTRAS_BACKUP_DIR}
136+
mv ${SRC_LIB_DIR}/BIP66 ${EXTRAS_BACKUP_DIR}
138137
mv ${SRC_LIB_DIR}/uECC ${EXTRAS_BACKUP_DIR}
139138
mv ${SRC_LIB_DIR}/bcl ${SRC_DIR}
140139
mv ${SRC_LIB_DIR}/date ${SRC_DIR}
141140
mv ${SRC_LIB_DIR}/rfc6979 ${SRC_DIR}
142-
mv ${SRC_LIB_DIR}/stl ${SRC_DIR}
143141

144142
echo -e "Moving Docs to the './extras' directory.\n"
145143
mv ${PROJECT_ROOT}/docs ${EXTRAS_DIR}
@@ -161,8 +159,8 @@ else
161159
echo -e "Creating the 'include' directory tree 🗂\n"
162160
mkdir ${INCLUDE_DIR}
163161
mkdir ${INCLUDE_CRYPTO_DIR}
164-
mkdir ${INCLUDE_CONFIGURATION_DIR}
165-
mkdir ${INCLUDE_ENUMS_DIR}
162+
mkdir ${INCLUDE_COMMON_DIR}
163+
mkdir ${INCLUDE_DEFAULTS_DIR}
166164
mkdir ${INCLUDE_HELPERS_DIR}
167165
mkdir ${INCLUDE_ENCODING_DIR}
168166
mkdir ${INCLUDE_IDENTITIES_DIR}
@@ -172,13 +170,15 @@ else
172170
echo -e "Moving 'arkCrypto.h' back to the 'include/cpp-crypto/' directory.\n"
173171
mv ${SRC_DIR}/arkCrypto.h ${INCLUDE_CRYPTO_DIR}
174172

175-
echo -e "Moving 'configuration' headers.\n"
176-
mv ${SRC_CONFIGURATION_DIR}/fee.h ${INCLUDE_CONFIGURATION_DIR}
177-
mv ${SRC_CONFIGURATION_DIR}/network.h ${INCLUDE_CONFIGURATION_DIR}
173+
echo -e "Moving 'common' headers.\n"
174+
mv ${SRC_COMMON_DIR}/configuration.hpp ${INCLUDE_COMMON_DIR}
175+
mv ${SRC_COMMON_DIR}/fee_policy.hpp ${INCLUDE_COMMON_DIR}
176+
mv ${SRC_COMMON_DIR}/network.hpp ${INCLUDE_COMMON_DIR}
178177

179-
echo -e "Moving 'enums' headers.\n"
180-
mv ${SRC_ENUMS_DIR}/fees.h ${INCLUDE_ENUMS_DIR}
181-
mv ${SRC_ENUMS_DIR}/types.h ${INCLUDE_ENUMS_DIR}
178+
echo -e "Moving 'defaults' headers.\n"
179+
mv ${SRC_DEFAULTS_DIR}/fee_policies.hpp ${INCLUDE_DEFAULTS_DIR}
180+
mv ${SRC_DEFAULTS_DIR}/static_fees.hpp ${INCLUDE_DEFAULTS_DIR}
181+
mv ${SRC_DEFAULTS_DIR}/transaction_types.hpp ${INCLUDE_DEFAULTS_DIR}
182182

183183
echo -e "Moving 'helpers/encoding' headers.\n"
184184
mv ${SRC_ENCODING_DIR}/hex.h ${INCLUDE_ENCODING_DIR}
@@ -191,10 +191,10 @@ else
191191
mv ${SRC_IDENTITIES_DIR}/wif.h ${INCLUDE_IDENTITIES_DIR}
192192

193193
echo -e "Moving 'networks' headers.\n"
194-
mv ${SRC_NETWORKS_DIR}/abstractnetwork.h ${INCLUDE_NETWORKS_DIR}
195-
mv ${SRC_NETWORKS_DIR}/devnet.h ${INCLUDE_NETWORKS_DIR}
196-
mv ${SRC_NETWORKS_DIR}/mainnet.h ${INCLUDE_NETWORKS_DIR}
197-
mv ${SRC_NETWORKS_DIR}/testnet.h ${INCLUDE_NETWORKS_DIR}
194+
mv ${SRC_NETWORKS_DIR}/networks.hpp ${INCLUDE_NETWORKS_DIR}
195+
mv ${SRC_NETWORKS_DIR}/devnet.hpp ${INCLUDE_NETWORKS_DIR}
196+
mv ${SRC_NETWORKS_DIR}/mainnet.hpp ${INCLUDE_NETWORKS_DIR}
197+
mv ${SRC_NETWORKS_DIR}/testnet.hpp ${INCLUDE_NETWORKS_DIR}
198198

199199
echo -e "Moving 'transactions' headers.\n"
200200
mv ${SRC_TRANSACTIONS_DIR}/builder.h ${INCLUDE_TRANSACTIONS_DIR}
@@ -205,17 +205,16 @@ else
205205
echo -e "Restoring the 'lib' directory.\n"
206206
mkdir ${SRC_LIB_DIR}
207207
mv ${EXTRAS_BACKUP_DIR}/ArduinoJson ${SRC_LIB_DIR}
208+
mv ${EXTRAS_BACKUP_DIR}/BIP66 ${SRC_LIB_DIR}
208209
mv ${EXTRAS_BACKUP_DIR}/uECC ${SRC_LIB_DIR}
209210
mv ${SRC_DIR}/bcl ${SRC_LIB_DIR}
210211
mv ${SRC_DIR}/date ${SRC_LIB_DIR}
211212
mv ${SRC_DIR}/rfc6979 ${SRC_LIB_DIR}
212-
mv ${SRC_DIR}/stl ${SRC_LIB_DIR}
213213

214214
echo -e "Moving Docs back to the project root directory.\n"
215215
mv ${EXTRAS_DIR}/docs ${PROJECT_ROOT}
216216

217217
echo -e "Removing old directories 🗑\n"
218-
rm -rf ${SRC_ENUMS_DIR}
219218
rm -rf ${EXTRAS_BACKUP_DIR}
220219

221220
echo -e "****************************************\n"

keywords.txt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,24 @@
88

99
Ark KEYWORD1
1010
Crypto KEYWORD1
11-
Configuration KEYWORD1
12-
Enums KEYWORD1
11+
common KEYWORD1
12+
defaults KEYWORD1
1313
Identities KEYWORD1
14-
Networks KEYWORD1
14+
managers KEYWORD1
1515
Transactions KEYWORD1
1616
Utils KEYWORD1
1717

18-
Fee KEYWORD1
18+
Configuration KEYWORD1
19+
FeePolicy KEYWORD1
1920
Network KEYWORD1
2021

21-
Fees KEYWORD1
22-
Types KEYWORD1
23-
2422
Address KEYWORD1
2523
PrivateKey KEYWORD1
2624
PublicKey KEYWORD1
2725
WIF KEYWORD1
2826

27+
Networks KEYWORD1
28+
2929
Builder KEYWORD1
3030
Deserializer KEYWORD1
3131
Serializer KEYWORD1
@@ -42,6 +42,10 @@ Slot KEYWORD1
4242
# Constants (LITERAL1)
4343
#######################################
4444

45+
Fees KEYWORD1
46+
StaticFeePolicy KEYWORD1
47+
TransactionTypes KEYWORD1
48+
4549
Devnet LITERAL1
4650
Mainnet LITERAL1
4751
Testnet LITERAL1

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"type": "git",
88
"url": "https://github.com/ArkEcosystem/Cpp-Crypto.git"
99
},
10-
"version": "0.5.0",
10+
"version": "0.6.0",
1111
"authors": [
1212
{
1313
"name": "Ark Ecosystem",

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Ark-Cpp-Crypto
2-
version=0.5.0
2+
version=0.6.0
33
author=Ark Ecosystem
44
maintainer=Ark Ecosystem
55
sentence=A simple Cryptography Implementation in C++ for the ARK Blockchain.

0 commit comments

Comments
 (0)