Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 26 additions & 34 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
.cache/

.vs
.vscode/*
Expand All @@ -58,47 +59,36 @@ release/
cmake-build-*/

docs
wallet/unittests/wallet_test
beam/beam
beam/unittests/node_test
bin/address_test
bin/asyncevent_test
bin/reactor_test
bin/tcpserver_test
bin/timer_test
chain/unittests/chain_test
miner/unittests/equihash_test
miner/unittests/miner_test
pool/unittests/pool_test
utility/unittest/serialize_test
utility/unittest/serialization_adapters_test
bin/channel_test
utility/unittest/timer_test
keychain/unittests/keychain_test
p2p/unittest/connectivity_stub_test
utility/unittest/address_test
utility/unittest/asyncevent_test
utility/unittest/channel_test
utility/unittest/logger_test
utility/unittest/reactor_test
utility/unittest/shared_data_test
utility/unittest/tcpclient_test
utility/unittest/tcpserver_test
wallet/unittests/keychain_test
wallet/unittests/wallet.dat
wallet/unittests/wallet_network_test
wallet/unittests/private_key_test
core/unittest/storage_test
core/unittest/ecc_test
.vs/
CMakeSettings.json
/utility/unittest/config_test
/p2p/unittest/dialog_test
/p2p/unittest/msg_serializer_test
/p2p/unittest/twopeers_test
/utility/unittest/bridge_test
/utility/unittest/config_test
beam/wallet.dat

# In-tree CMake executables (Unix/macOS; out-of-source builds use ignored build/)
beam/beam-node
bvm/ethash_service/ethash-service
bvm/sid_generator/generate-sid
explorer/explorer-node
node/functionaltests/*_test
node/utils/laser_beam_demo
node/utils/node_net_sim
node/utils/pipe_link
pow/miner_client
wallet/api/wallet-api
wallet/broadcaster/broadcaster
wallet/cli/beam-wallet
wasmclient/wasm-client
3rdparty/libbitcoin/examples/atomic_swap
3rdparty/libbitcoin/examples/electrum_get_balance
3rdparty/libbitcoin/examples/ethereum_example
3rdparty/libbitcoin/examples/get_info
3rdparty/libbitcoin/examples/sign_tx

3rdparty/opencl-miner/equihash_150_5.dat
ui/beam.rc
ui/beam.png
Expand All @@ -110,6 +100,8 @@ ui/*.qm
ui/translations.qrc
beam_version.gen
keykeeper/wasm-key-keeper.*
*/unittest/*
*/unittests/*

out/
wmake.sh
out/
wmake.sh
2 changes: 1 addition & 1 deletion bvm/Shaders/Explorer/Parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3118,7 +3118,7 @@ void ParserContext::OnState_DEX(uint32_t /* iVer */)
DocAddTableHeader("Amount2");
DocAddTableHeader("Amount-LP-Token");
DocAddTableHeader("Rate 1:2");
DocAddTableHeader("Rate 2:2");
DocAddTableHeader("Rate 2:1");
}

Env::Key_T<Amm::Pool::Key> k0, k1;
Expand Down
Binary file modified bvm/Shaders/Explorer/Parser.wasm
100644 → 100755
Binary file not shown.
113 changes: 113 additions & 0 deletions bvm/Shaders/make_all.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/bin/sh
# Build every shader. Optional --export [out_dir] also collects per-contract
# parser modules into a single folder ready for an explorer's
# --contract_rich_parser_folder. Default out_dir: Explorer/modules/
#
# Usage:
# make_all.sh # build only
# make_all.sh --export # build, export to Explorer/modules/
# make_all.sh --export <path> # build, export to <path>
set -e
cd "$(dirname "$0")"

EXPORT_FLAGS=""
if [ "$1" = "--export" ]; then
OUT_DIR="${2:-Explorer/modules}"
EXPORT_FLAGS="--export $OUT_DIR"
mkdir -p "$OUT_DIR"
find "$OUT_DIR" -name '*.wasm' -delete
fi

build() {
./make_shader.sh $EXPORT_FLAGS "$1"
}

build amm/app
build amm/contract
build amm/parser
build asset_man/app
build asset_man/contract
build bans/app
build bans/contract
build bans/parser
build blackhole/app
build blackhole/contract
build blackhole/parser
build aphorize/contract
build dao-accumulator/app
build dao-accumulator/contract
build dao-accumulator/parser
build dao-core/app
build dao-core/app-admin
build dao-core/contract
build dao-core/parser
build dao-core-masternet/app
build dao-core-masternet/app-admin
build dao-core-masternet/contract
build dao-core-testnet/app
build dao-core-testnet/app-admin
build dao-core-testnet/contract
build dao-core2/app
build dao-core2/contract
build dao-core2/parser
build dao-vote/app
build dao-vote/contract
build dao-vote/parser
build dao-vault/app
build dao-vault/contract
build dao-vault/parser
build dummy/app
build dummy/contract
build faucet/app
build faucet/contract
build faucet/parser
build faucet2/app
build faucet2/contract
build faucet2/parser
build fuddle/contract
build gallery/app
build gallery/app-admin
build gallery/contract
build gallery/parser
build minter/app
build minter/contract
build minter/parser
build mirrorcoin/app
build mirrorcoin/contract
build nephrite/app
build nephrite/contract
build nephrite/parser
build oracle/contract
build oracle2/app
build oracle2/contract
build oracle2/parser
build perpetual/app
build perpetual/contract
build pipe/contract
build playground/app
build playground/contract
build profit_pool/app
build profit_pool/contract
build roulette/app
build roulette/contract
build sidechain/contract
build sidechain_pos/parser
build pbft/parser
build StableCoin/contract
build upgradable/contract
build upgradable2/contract
build upgradable2/Test/test_app
build upgradable2/Test/test_v0
build upgradable2/Test/test_v1
build upgradable3/Test/test_app
build upgradable3/Test/test_v0
build upgradable3/Test/test_v1
build upgradable3/Test/test_v0_migrate
build vault/app
build vault/contract
build vault/parser
build vault_anon/app
build vault_anon/contract
build vault_anon/parser
build voting/app
build voting/contract
32 changes: 32 additions & 0 deletions bvm/Shaders/make_shader.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/sh
# Build a wasm shader. Optional --export <out_dir> additionally copies
# parser modules (basename "parser") into <out_dir> for bundling into
# an explorer --contract_rich_parser_folder. No-op for non-parser targets.
#
# Usage:
# make_shader.sh <name> # build only
# make_shader.sh --export <out_dir> <name> # build, then export if parser

CLANG="${CLANG:-/opt/homebrew/opt/llvm/bin/clang}"

EXPORT_DIR=""
if [ "$1" = "--export" ]; then
EXPORT_DIR="$2"
shift 2
fi

NAME="$1"

"$CLANG" -O3 --target=wasm32 -std=c++17 -fno-rtti \
-Wl,--export-dynamic,--no-entry,--allow-undefined \
-nostdlib "$NAME.cpp" --output "$NAME.wasm"

if [ -n "$EXPORT_DIR" ]; then
case "$NAME" in
*/parser)
mkdir -p "$EXPORT_DIR"
BASENAME=$(dirname "$NAME")
cp "$NAME.wasm" "$EXPORT_DIR/$BASENAME.parser.wasm"
;;
esac
fi
12 changes: 12 additions & 0 deletions core/version.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include <string>

inline constexpr unsigned VERSION_MAJOR = 7;
inline constexpr unsigned VERSION_MINOR = 5;
inline constexpr unsigned VERSION_REVISION = 14456;
inline const std::string GIT_COMMIT_HASH = "16f9d5870a70026e8cb2e9b94f7bf5470224a4d4";
inline const std::string PROJECT_VERSION = "7.5.14456";
inline const std::string BRANCH_NAME = "boost-1.90";

#ifndef BEAM_LIB_VERSION
#define BEAM_LIB_VERSION "7.5.14456"
#endif
6 changes: 6 additions & 0 deletions utility/cli/options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,10 @@ namespace beam
const char* PAYMENT_PROOF_EXPORT = "payment_proof_export";
const char* PAYMENT_PROOF_VERIFY = "payment_proof_verify";
const char* PAYMENT_PROOF_DATA = "payment_proof";
const char* SIGN_MESSAGE = "sign_message";
const char* VERIFY_MESSAGE = "verify_message";
const char* MSG_TO_SIGN = "message";
const char* SIGNATURE = "signature";
const char* TX_ID = "tx_id";
const char* SEED_PHRASE = "seed_phrase";
const char* IGNORE_DICTIONARY = "ignore_dictionary";
Expand Down Expand Up @@ -475,6 +479,8 @@ namespace beam
(cli::KEY_SUBKEY, po::value<Positive<uint32_t>>(), "miner key index (use with export_miner_key)")
(cli::WALLET_ADDR, po::value<string>()->default_value("*"), "wallet address")
(cli::PAYMENT_PROOF_DATA, po::value<string>(), "payment proof data to verify")
(cli::MSG_TO_SIGN, po::value<string>()->default_value(""), "message to sign or verify")
(cli::SIGNATURE, po::value<string>(), "hex-encoded signature (for verify_message)")
(cli::HID_INSTALL_FILE, po::value<string>(), "App image file to install on HID device. If not specified - integrated image will be used")
(cli::UTXO, po::value<vector<string>>()->multitoken(), "set IDs of specific UTXO to send")
(cli::IMPORT_EXPORT_PATH, po::value<string>()->default_value("export.dat"), "path to import or export wallet data (should be used with import_data|export_data)")
Expand Down
4 changes: 4 additions & 0 deletions utility/cli/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ namespace beam
extern const char* VERSION_FULL;
extern const char* GIT_COMMIT_HASH;
extern const char* WALLET_ADDR;
extern const char* SIGN_MESSAGE;
extern const char* VERIFY_MESSAGE;
extern const char* MSG_TO_SIGN;
extern const char* SIGNATURE;
extern const char* CHANGE_ADDRESS_EXPIRATION;
extern const char* WALLET_ADDRESS_LIST;
extern const char* WALLET_ADDRESS_VERIFY;
Expand Down
19 changes: 17 additions & 2 deletions wallet/api/v7_0/v7_0_api_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
#include <vector>
#include <memory>
#include <string>
#include <boost/optional.hpp>
#include "core/ecc_native.h"
#include "wallet/core/common.h"

namespace beam::wallet
{
Expand All @@ -28,7 +30,8 @@ namespace beam::wallet
macro(IPFSUnpin, "ipfs_unpin", API_WRITE_ACCESS, API_ASYNC, APPS_ALLOWED) \
macro(IPFSGc, "ipfs_gc", API_WRITE_ACCESS, API_ASYNC, APPS_ALLOWED) \
macro(SignMessage, "sign_message", API_READ_ACCESS, API_SYNC, APPS_ALLOWED) \
macro(VerifySignature, "verify_signature", API_READ_ACCESS, API_SYNC, APPS_ALLOWED)
macro(VerifySignature, "verify_signature", API_READ_ACCESS, API_SYNC, APPS_ALLOWED) \
macro(VerifyMessage, "verify_message", API_READ_ACCESS, API_SYNC, APPS_ALLOWED)
// TODO:IPFS add ipfs_caps/ev_ipfs_state methods that returns all available capabilities and ipfs state

struct IPFSAdd
Expand Down Expand Up @@ -96,7 +99,8 @@ namespace beam::wallet

struct SignMessage
{
std::vector<uint8_t> keyMaterial;
boost::optional<std::vector<uint8_t>> keyMaterial; // deprecated, kept for backward compat
boost::optional<std::string> address; // preferred: own wallet address
std::string message;
struct Response
{
Expand All @@ -114,4 +118,15 @@ namespace beam::wallet
bool result;
};
};

struct VerifyMessage
{
WalletID address = Zero;
std::string message;
std::vector<uint8_t> signature;
struct Response
{
bool isValid;
};
};
}
45 changes: 41 additions & 4 deletions wallet/api/v7_0/v7_0_api_handle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,35 @@ namespace beam::wallet
{
SignMessage::Response resp;
ECC::Hash::Value hv;
MyProcessor::DeriveKeyPreimage(hv, Blob(req.keyMaterial));
auto db = getWalletDB();
auto pKdf = db->get_MasterKdf();
ECC::Scalar::Native sk;
pKdf->DeriveKey(sk, hv);

auto db = getWalletDB();

if (req.keyMaterial)
{
// Legacy path: derive key from raw key material
MyProcessor::DeriveKeyPreimage(hv, Blob(*req.keyMaterial));
auto pKdf = db->get_MasterKdf();
pKdf->DeriveKey(sk, hv);
}
else
{
// Address-based path
WalletAddress addr;
if (req.address)
{
auto found = db->getAddressByToken(*req.address);
if (!found || !found->isOwn())
throw jsonrpc_exception(ApiError::InvalidParamsJsonRpc, "Address not found or not owned by this wallet");
addr = *found;
}
else
{
db->getDefaultAddressAlways(addr);
}
PeerID pid;
db->get_SbbsPeerID(sk, pid, addr.m_OwnID);
}

GetMessageHash(hv, req.message);

Expand All @@ -261,4 +285,17 @@ namespace beam::wallet
resp.result = sig.IsValid(hv, req.publicKey);
doResponse(id, resp);
}

void V70Api::onHandleVerifyMessage(const JsonRpcId& id, VerifyMessage&& req)
{
ECC::Hash::Value hv;
GetMessageHash(hv, req.message);

Deserializer d;
ECC::Signature sig;
d.reset(req.signature);
d & sig;

doResponse(id, VerifyMessage::Response{req.address.m_Pk.CheckSignature(hv, sig)});
}
}
Loading