Giter Club home page Giter Club logo

headless-obyte's Introduction

Headless wallet for Obyte network

This is a headless alternative of the GUI wallet for Obyte network. It is designed for an always-online deployment on a server.

Install

Install node.js, install yarn (npm install -g yarn), clone the repository, then say

yarn

If you want to accept incoming connections, you'll need to set up a proxy, such as nginx, to forward all websocket connections on a specific path to your daemon running this code. See example configuration for nginx in ocore documentation.

Testnet

Run cp .env.testnet .env to connect to TESTNET hub. Backup and delete the database if you already ran it on MAINNET. Wallet app for TESTNET can be downloaded from Obyte.org website.

Run

node start.js 2>errlog

The first time you run it, it will generate a new extended private key (BIP44) and ask you for a passphrase to encrypt it. The BIP39 mnemonic will be saved to the file keys.json in the app data directory (see ocore for its location), the passphrase is, of course, never saved. Every time you start the wallet, you'll have to type the passphrase. One implication of this is the wallet cannot be started automatically when your server restarts, you'll have to ssh the server and type the passphrase.

After you enter the passphrase, the wallet redirects all output to a log file in your app data directory but it still holds the terminal window. To release it, type Ctrl-Z, then bg to resume the wallet in the background. After that, you can safely terminate the ssh session.

Running non-interactively

If you are unable to enter a passphrase every time the wallet starts and/or are willing to accept the security risks, set bNoPassphrase to true and daemonize the app when starting:

node start.js 1>log 2>errlog &

If you run the wallet in a non-permanent environment such as Heroku (where hard disks are ephemeral and deleted on each restart), supply your mnemonic as an environment variable mnemonic to ensure that the keys are not regenerated every time. Your private keys are derived from the mnemonic. Also set bLight and bSingleAddress to true. See below about conf options.

Backup

If you run only a headless wallet, backing up keys.json (or just the mnemonic from this file) in your data folder is enough, the rest can be restored by syncing the node again (which takes several days) and running the below script. If your headless wallet is included in a bigger application which stores its own data in addition to the public DAG data, you need to back up your entire data folder.

Recovery from seed (mnemonic)

cd tools
node recovery.js --limit=20

The script generates your wallet addresses and stops when it finds limit (default 20) unused addresses in a row. If using full wallet, your node should be synced before running the script.

If you already have keys.json file, copy it to the data folder, otherwise the script will ask you about your mnemonic.

Customize

If you want to change any defaults, refer to the documentation of ocore, the core Obyte library require()'d from here. Below are some headless wallet specific settings you might want to change:

  • bLight: some bots don't need to sync full node. If your bot is designed to work as light node or you just wish to get it working first, change bLight variable to true in configuration file. Changing this value will make it use a different SQLite database next time you run it.
  • bSingleAddress: Should the wallet use single address or could generate new addresses?
  • bStaticChangeAddress: Should the wallet issue new change addresses or always use the same static one?
  • control_addresses: array of device addresses of your other (likely GUI) wallets that can chat with the wallet and give commands. To learn the device address of your GUI wallet, click menu button, then Global preferences, and look for 'Device address'. If your control_addresses is empty array or contains a single address that is invalid (this is the default), then nobody can remotely control your wallet.
  • payout_address: if you give pay command over chat interface, funds will be sent to this Obyte address.
  • hub: hub address without wss://, the default is obyte.org/bb.
  • deviceName: the name of your device as seen in the chat interface.
  • permanent_pairing_secret: the pairing secret used to authenticate pairing requests when you pair your GUI wallet for remote control. The pairing secret is the part of the pairing code after #.
  • bNoPassphrase: don't ask for passphrase when starting the wallet, assume it is an empty string. This option weakens the security of your funds but allows to start the wallet non-interactively.
  • LOG_FILENAME: by default log.txt file in data folder, set to /dev/null to disable all logs.
  • logToSTDOUT: by default false and writes logs to LOG_FILENAME file, set to true if you wish to keep the logs output to terminal screen, instead of file.

Remote control

You can remotely control your wallet via chat interface from devices listed in control_addresses. When the wallet starts, it prints out its pairing code. Copy it, open your GUI wallet, menu button, paired devices, add a new device, accept invitation, paste the code. Now your GUI wallet is paired to your headless wallet and you can find it in the list of correspondents (menu, paired devices) to start a chat. These are the commands you can give:

  • balance: to request the current balance on the headless wallet;
  • address: to get to know one of the wallet's addresses, you use it to refill the wallet's balance;
  • pay <amount in bytes> to withdraw Bytes to your payout_address;
  • pay all bytes to withdraw all Bytes (including earned commissions) to your payout_address;
  • pay <amount> <asset> to withdraw specific asset to your payout_address;
  • mci: to get the last stable MCI on the headless wallet;
  • space: to get the file sizes of data folder;

Chat with headless wallet

Differences from GUI wallet

  • Headless wallet (as software) can have only one wallet (as storage of funds) AKA account, its BIP44 derivation path is m/44'/0'/0'. In GUI wallet (as software) you can create multiple wallets (as storage of funds).
  • Headless wallet cannot be a member of multisig address because there is nobody to present confirmation messages to. Hence, you can't have multisig security on headless wallets and have to have other security measures in place.

Security recommendations

First, don't run the server wallet if you don't absolutely need to. For example, if you want to only accept payments, you don't need it. Consider server wallet only if you need to send payments in programmatic manner.

Having the keys encrypted by a passphrase helps protect against the most trivial theft of private keys in case an attacker gets access to your server. Set a good passphrase that cannot be easily bruteforced and never store it on the server.

However, that is not enough. If an attacker gets access to your server, he could also modify your conf.json and change control_addresses and payout_address, then wait that you restart the wallet and steal its entire balance. To help you prevent such attacks, every time the wallet starts it prints out the current values of control_addresses and payout_address, please pay attention to these values before entering your passphrase.

Use TOR (conf.socksHost, conf.socksPort, and conf.socksLocalDNS) to hide your server IP address from potential attackers.

Don't keep more funds than necessary on the server wallet, withdraw the excess using pay command in the chat interface.

Custom commands

Payments are the central but not the only type of data that Obyte stores. In tools/ subdirectory, you will find many small scripts that demonstrate how to create other message types that are not available through the GUI wallet. In particular, you can declare and issue your own assets, post data as an oracle, create polls and cast votes. Just edit any of these scripts and run it.

RPC service

By default, no RPC service is enabled. If you want to manage your headless wallet via JSON-RPC API, e.g. you run an exchange, run tools/rpc_service.js instead. See the documentation about running RPC service.

Docker image

You can build and run your own docker image.

To build the docker image run:

docker build -t headless-obyte:latest -f docker/Dockerfile .

To run the docker container execute:

docker run -it \
  --name headless-obyte \
  -v "$(pwd)"/docker/configs:/home/node/.config \
  headless-obyte:latest

The start.js script asks for the passphrase, so the user should input the passphrase and let the script running in the background. (hit Ctrl+P+Q)

To stop the docker container run:

docker stop headless-obyte

To remove the stoped docker container run:

docker rm headless-obyte

To remove not used docker image run:

docker rmi headless-obyte:latest

You can also use scripts

Before running scripts, you must give permission to execute them:

chmod +x docker/*.sh

To build the docker image run:

docker/build.sh [tagname]

To run the docker container execute:

docker/run.sh [tagname] [volume_path]

To stop and remove the docker container run:

docker/stop.sh [tagname]

headless-obyte's People

Contributors

1hyena avatar bonustrack avatar drsensor avatar kaiurin avatar kakysha avatar nothingismagick avatar tarmo888 avatar temikng avatar tonyofbyteball avatar vakar8888 avatar valyakin avatar xjenekx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

headless-obyte's Issues

Not able to find memory index reference in headers_commision.js

I did node start.js and things work ok with last line being as below
From this point, output will be redirected to C:\Users\dhama\AppData\Local/headless-byteball/log.txt
To release the terminal, type Ctrl-Z, then 'bg'

But suddenly it breaks with following issue:

D:\testbb\headless-byteball\node_modules\byteballcore\headers_commission.js:92
var next_mc_unit_props = storage.assocStableUnitsByMci[parent.main_chain_index+1].find(function(props){return props.is_on_main_chain});
^

TypeError: Cannot read property 'find' of undefined
at D:\testbb\headless-byteball\node_modules\byteballcore\headers_commission.js:92:91
at Array.forEach ()
at D:\testbb\headless-byteball\node_modules\byteballcore\headers_commission.js:90:22
at Statement. (D:\testbb\headless-byteball\node_modules\byteballcore\sqlite_pool.js:115:6)

Missing payments

I installed and configured headless-byteball on Ubuntu using mysql database.
I managed to connect to it from my desktop wallet.
After issuing command 'address', it gives me byteball addresses, different each time.
I tried to send 1000 bytes to two such addresses, but for some reason they did not appear on balance. Both transactions have been
That is unforgivable bug, so we need to figure out what's happened and try to fix it.
image

Creating an asset in the testnet

Hi,
I'm a developer struggling to define a new asset in the testnet

These are the steps I already managed to complete:

Cloning and running the byteball client locally (from the code)
Exchanging bytes on the livenet and testnet
Running the byteball-headless client locally

What I understood from the documentation is that I need to run a command (there is a create_asset.js script in the play directory of headless byteball) in order to create an asset but I got stuck with some errors.

I firstly changed the hub url to the testnet in conf.js:
exports.hub = 'byteball.org/bb-test';

There seem to be some protocol compatibility problems I can read from the log (though it doesn't stop the client):

SENDING ["justsaying",{"subject":"error","body":"Incompatible versions, mine 1.0, yours 1.0t"}] to wss://byteball.org/bb-test
close event, removing 0: wss://byteball.org/bb-test

I have also encountered a problem pairing my UI client to the headless one, my parallel thread of investigation. The client is operating on the testnet as well and I set up the control_address and payout_address in configuration file (conf.js) as follows (they are the value I read from the UI client);

exports.storage = 'sqlite';


exports.hub = 'byteball.org/bb-test';
exports.deviceName = 'ignite-VirtualBox';
exports.permanent_paring_secret = 'randomstring';
exports.control_addresses = ['0W87676ZG4ZT7AY2QX7C7YEJ5CEORIAF2'];
exports.payout_address = 'BKQXMJDKHC5W2JLMQVT2VEHQUC5WADZZ';
exports.KEYS_FILENAME = 'keys.json';

// where logs are written to (absolute path).  Default is log.txt in app data directory
//exports.LOG_FILENAME = '/dev/null';

// this is for runnining RPC service only, see play/rpc_service.js
exports.rpcInterface = '127.0.0.1';
exports.rpcPort = '6332';

console.log('finished headless conf');

But the pairing doesn't occur. when I type the pairing code into the UI I get no complaints, but as soon as I start to type commands in the chat I get this message:

device with this pubkey is not registered here

My wild guess is that my headless client should have been already registered on the testnet at this point but it hasn't done it yet, maybe because of the protocol incompatibility. But it's just a guess.

Finally I tried to create an asset running node play/create_asset.js with poor results:

setDevicePrivateKey
objMyTempDeviceKey not set yet, can't log in
long query took 33ms:
SELECT MAX(lb_units.main_chain_index) AS min_retrievable_mci
                FROM units JOIN units AS lb_units ON units.last_ball_unit=lb_units.unit
                WHERE units.is_on_main_chain=1 AND units.is_stable=1, 
load avg: 0.12890625, 0.291015625, 0.36767578125
no leftovers
outbound peers: 
will connect to wss://byteball.org/bb-test
connectToPeer done
my_device_hub not set yet, can't log in
setDeviceName TestDevice
setDeviceHub byteball.org/bb-test
logging in to hub byteball.org/bb-test
outbound peers: 
already connecting to wss://byteball.org/bb-test
====== my device address: ****************************************
====== my device pubkey: ****************************************
====== my pairing code: **************************************************************************************************************
/home/ignite/IdeaProjects/headless-byteball/node_modules/byteballcore/my_witnesses.js:32
                        throw Error("wrong number of my witnesses: "+arrWitnesses.length);
                        ^

Error: wrong number of my witnesses: 0
    at Error (native)
    at /home/ignite/IdeaProjects/headless-byteball/node_modules/byteballcore/my_witnesses.js:32:10
    at /home/ignite/IdeaProjects/headless-byteball/node_modules/byteballcore/sqlite_pool.js:220:5
    at Statement.<anonymous> (/home/ignite/IdeaProjects/headless-byteball/node_modules/byteballcore/sqlite_pool.js:113:6)

At the moment I'm stuck. What am I doing wrong? Does anyone have the same issue or any clue? I would be thankful if you could give an hint.

"Mandatory upgrade required: [..]" error, persists after clean install of headless-obyte

I launched my headless wallet, and it ended up in an error that wasn't there before.
I tried to fix this by upgrading my nodejs to v10.16.3 and rebuilding the headless wallet from scratch, but the error persists.
A headless wallet that had been installed on a different machine a while ago, works just fine.

My actions:

git clone https://github.com/byteball/headless-obyte.git
cd headless-obyte
npm install
node start.js

After requesting the passphrase, it throws the following error:

/home/tl/Work/headless-obyte/node_modules/ocore/network.js:2404
                        throw Error("Mandatory upgrade required, please check the release notes at https://github.com/byteball/obyte-gui-wallet/releases and upgrade.");
                        ^

Error: Mandatory upgrade required, please check the release notes at https://github.com/byteball/obyte-gui-wallet/releases and upgrade.
    at handleJustsaying (/home/tl/Work/headless-obyte/node_modules/ocore/network.js:2404:10)
    at WebSocket.onWebsocketMessage (/home/tl/Work/headless-obyte/node_modules/ocore/network.js:3019:11)
    at WebSocket.emit (events.js:198:13)
    at Receiver.ontext (/home/tl/Work/headless-obyte/node_modules/ws/lib/WebSocket.js:841:10)
    at /home/tl/Work/headless-obyte/node_modules/ws/lib/Receiver.js:536:18
    at /home/tl/Work/headless-obyte/node_modules/ws/lib/Receiver.js:368:7
    at /home/tl/Work/headless-obyte/node_modules/ws/lib/PerMessageDeflate.js:249:5
    at afterWrite (_stream_writable.js:485:3)
    at onwrite (_stream_writable.js:476:7)
    at InflateRaw.afterTransform (_stream_transform.js:94:3)

Error links to a gui wallet github, it's hardcoded in ocore module.
Linking to an earlier commit of ocore in package.json, taken from the working headless wallet, results in the same error.

node start.js fails with ReferenceError: window is not defined

  • commit: 0b26222
  • macOS 10.11.6
  • node version: v9.2.1
  • npm version: 5.5.1
$ node start.js
finished headless conf
merged app root conf from /Users/achiku/work/achiku/headless-byteball/conf.js
app dir /Users/achiku/work/achiku/headless-byteball
not using user conf: Error: Cannot find module '/Users/achiku/Library/Application Support/headless-byteball/conf.json'
app dir /Users/achiku/work/achiku/headless-byteball
path=/Users/achiku/Library/Application Support/headless-byteball/
createDatabaseIfNecessary byteball.sqlite
app dir /Users/achiku/work/achiku/headless-byteball
takeConnectionFromPool will wait for ready
stat Error: ENOENT: no such file or directory, stat '/Users/achiku/Library/Application Support/headless-byteball/byteball.sqlite'
will copy initial db
mkdir /Users/achiku/Library/Application Support: Error: EEXIST: file already exists, mkdir '/Users/achiku/Library/Application Support'
mkdir /Users/achiku/Library/Application Support/headless-byteball/: null
db is now ready
opening new db connection
opened db
db version 11, software version 16
=== will upgrade the database, it can take some time
=== db upgrade finished
-----------------------
remote access allowed from devices: DEVICE ALLOWED TO CHAT
payouts allowed to address: WHERE THE MONEY CAN BE SENT TO
-----------------------
failed to read keys, will gen
Please name this device [akmac.local]:
Device name saved to /Users/achiku/Library/Application Support/headless-byteball/conf.json, you can edit it later if you like.

keys created
will archive if exists from unit N6QadI9yg3zLxPMphfNGJcPfddW4yHPkoGMbbGZsWa0=
/Users/achiku/work/achiku/headless-byteball/node_modules/byteballcore/mail.js:8
if (!(window && window.cordova)) {
      ^

ReferenceError: window is not defined
    at Object.<anonymous> (/Users/achiku/work/achiku/headless-byteball/node_modules/byteballcore/mail.js:8:7)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/achiku/work/achiku/headless-byteball/node_modules/byteballcore/network.js:26:37)
    at Module._compile (module.js:571:32)
[~/work/achiku/headless-byteball] (master|✔)
$ node --version
v9.2.1

Pending address and unknown unit

So my exchange did a few consecutive payments of blackbytes. One of the transaction is pending all the time and it looks like a wrong unit was choosen (i cant find it in the block explorer).

Unit: LIo99QxjCkvYI3wtu0hqegmreoio7qHmdgQ1t5x45oE=
Proof of Payment:

capture

The other 2 transactions went through: w37eLcG57mkhsBUZmaCT+y08Lfr0Q9zXv/jzfL2aI40=

Crashing on SQL error running as RPC service

I have tried deleting all of the sqlite DBs except for the -wal one with the same result. If the -wal is corrupt is there any way to recover the wallet without it?

Output is:

  [],
  [Function] ]
/home/gbyte/GBYTE/src/node_modules/byteballcore/sqlite_pool.js:101
                                                throw Error(err+"\n"+sql+"\n"+new_args[1].map(function(param){ if (param === null) return 'null'; if (param === undefined) return 'undefined'; return param;}).join(', '));
                                                ^

Error: Error: SQLITE_CORRUPT: database disk image is malformed
SELECT dependencies.unit, unhandled_joints.unit AS unit_for_json,
                                SUM(CASE WHEN units.unit IS NULL THEN 1 ELSE 0 END) AS count_missing_parents
                        FROM dependencies
                        JOIN unhandled_joints ON dependencies.unit=unhandled_joints.unit
                        LEFT JOIN units ON dependencies.depends_on_unit=units.unit

                        GROUP BY dependencies.unit
                        HAVING count_missing_parents=0
                        ORDER BY NULL

    at Error (native)
    at Statement.<anonymous> (/home/gbyte/GBYTE/src/node_modules/byteballcore/sqlite_pool.js:101:13)

Any way to load a headless wallet key into GUI wallet?

Is there a way to load the mnemonic key from the headless wallet into the GUI wallet? It's going to take days for our headless wallet to sync and need to send some funds pretty soon.

I tried restoring from it in the GUI wallet but it said there were no active addresses for it.

how to connect to testnet in headless-byteball

Hi
Can headless-byteball connect to testnet?
if yes, how to connect to ?
I have set configurations in conf.js:
exports.port = 16611;
exports.hub = 'byteball.org/bb-test';
but it seems not work.
Any idea? thanks in advance

Slooooooow sync (

I waste one week and i got 3.7m blockchain height.
Now when i check speed - it is near 20-30 seconds for 1 chain.
I nee more than 100 000 for fully sync.
P.S. i Have 2 core + 4Gb mem, but in top i see - all resources are free..
Why it is too slow?

P.S. in explorer still nothing!

root@byteball:/mnt# ./getinfo.sh
{
  "jsonrpc": "2.0",
  "result": {
    "last_mci": 3723438,
    "last_stable_mci": 3723421,
    "count_unhandled": 0
  },
  "id": 1
}

1

Execute the npm install to report an error

hello,I execute npm install is error

\node-gyp\bin\node-gyp.js" rebuild ) else (node "C:\Users\zzh\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
internal/modules/cjs/loader.js:596
throw err;
^

Error: Cannot find module 'nan'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
at Function.Module._load (internal/modules/cjs/loader.js:520:25)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
at [eval]:1:1
at Script.runInThisContext (vm.js:91:20)
at Object.runInThisContext (vm.js:298:38)
at Object. ([eval]-wrapper:6:22)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at evalScript (internal/bootstrap/node.js:539:27)
gyp: Call to 'node -e "require('nan')"' returned exit status 1 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: gyp failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (C:\Users\zzh\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\configure.js:336:16)
gyp ERR! stack at ChildProcess.emit (events.js:182:13)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
gyp ERR! System Windows_NT 10.0.16299
gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Users\zzh\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "rebuild"
gyp ERR! cwd D:\github\byteball\headless-byteball\node_modules\byteballcore\node_modules\secp256k1
gyp ERR! node -v v10.3.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] rebuild: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] rebuild script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\zzh\AppData\Roaming\npm-cache_logs\2018-07-04T07_43_16_355Z-debug.log
"Secp256k1 bindings compilation fail. Pure JS implementation will be used."

please help me

How to visualize wether the asset has been created or not, before sending the transaction?

Hi Everyone,
I am Abdul, currently working as a Blockchain Developer in Amco IT Systems. I am working on DAG currently in which I am making my own Obyte network named ORIO. Basically, we are trying to make our own DAG Cryptocurrency.
I have to generate my new asset for this purpose. The problem I am facing is that I am unable to visualize wether our asset is being generated or not? In order to issue the asset, we first need to create and then send transaction from definer address. But How to make sure that our asset has been created and is ready to send a transaction?
The code of "create_asset.js" is running smoothly without any error.
I am following the Documentation here: https://developer.obyte.org/issuing-assets-on-byteball
Also, I am using the same code and rules as described above.

I Can't start rpc_service.js as daemon - stuck on ask password.

When i start node rpc_service.js - it is ask password, and i can insert it.
But how to start like a service/daemon?

For example pm2 start /mnt/headless-byteball/play/rpc_service.js - not worked, because it stuck on asked password.
How to set password in config or else place?
Thanks.

accept passphrase, etc. as environment variables to facilitate easier devops

ideally i'd like to be able to spin up an environment with ansible or something and have everything ready to go without manually logging in via ssh to (re)boot key processes periodically

also, being able to keep everything the same but swap between setups for testing (e.g. CI) would be handy

it's pretty common for vendors such as heroku, circle CI, travis, etc. to offer environment variables for this purpose

AFAIK environment variables don't come with any more/less security concerns than the current setup, but could make things much easier to manage

accept network details, such as whether to use the testnet at startup

testnetify.sh seems rather fragile to me, is it really OK to rewrite files that npm manages in a way that it is not aware of?

e.g. what stops the modifications getting blown away the next time npm updates the byteballcore dependency?

is there any way that network details could be passed through at startup?

To much resources needed

I tried the headless wallet on my Raspberry Pi.
When I started the node, the whole system was overloaded. It should be possible to run a node on a system with a Quad Core 1.2GHz CPU and 1GB RAM.

edit: Synced node don't need that much resources. Is something like ethereums initial fast sync possible here + low power usage?

Ball nz9oM3hs... is not known in hash tree

I'm running the headless-wallet, i have some trouble replaying the chain, at the unit "Bw2X3jcqSAGLh98HVwM8Lx+Q3z5Z8gfKrdcGkxSPP34=" there is an error that prevent me to go forward, the error say "ball nz9oM3hsBeq1fpFD5kgopUoimlu05mcOYQNnDmN5n1k= is not known in hash tree". This leave the server in a loop, it keep requesting peers for that unit.

Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): SENDING ["justsaying",{"subject":"info","body":{"unit":"052/D8+utwFZq68L2E2IDsn+VkPXHXtgxiti79u9Vnc=","info":"unresolved dependencies: 76uNtfd/IiM7BkIUjGZlArua+jCYJvQ1stXLPmdz8cE="}}] to wss://byteball.org/bb
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): lock released [ 'handleJoint' ]
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): handleQueue 0 items
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): handleQueue done 0 items
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): known unverified
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): RECEIVED ["response",{"tag":"4sTd1l4hzzHdbtADCNMcHkFGCjHg3YFLKOiM3gT8qrA=","response":{"joint":{"unit":{"unit":"Bw2X3jcqSAGLh98HVwM8Lx+Q3z5Z8gfKrdcGkxSPP34=","version":"1.0","alt":"1","witness_list_unit":"oj8yEksX9Ubq7lLc+p6F2uyHUuynugeVq4+ikT67X6E=","last_ball_unit":"ks60hUXHF3ZLpmi11lLVtDvIy0my6gyCGf/N/VtLpxo=","last_ball":"J55H49dsRASELoiN+zjR0rR6OCwZHiCcFxZo6yQZxIU=","headers_commission":454,"payload_commission":197,"main_chain_index":3625380,"timestamp":1538848690,"parent_units":["eSkrXfZzSipB2X0x+moG2RB15QejPLO1Vw504jcSio8="],"authors":[{"address":"4ZFKFAMGQZQUITIU6XBFZKYWS7NRJ5RG","authentifiers":{"r.1":"5XWsAqdEW2jxLkGLpcWw45UjHWYAKXVtL1RwnKncsmYWPVvIILuopkVV/cNeVXNo28q7ytD894NjkTiEfZpYNg=="},"definition":["r of set",{"required":1,"set":[["sig",{"pubkey":"Ai/kpexRPuMn3DyyO6Zyvr24PwwfyVh0Gm2U5z5/pZ2L"}],["sig",{"pubkey":"A5Me9RlrPlWCjSq0cGkfVK2anmo59BjAIEKm3yafuLxS"}]]}]}],"messages":[{"app":"payment","payload_hash":"dZ/BVfUVwWfv9nThja4uY8YIspgeuftM0DrqZwsXQko=","payload_location":"inlin... (1391 chars) from wss://byteball.org/bb
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): lock acquired [ 'handleJoint' ]
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): 
validating joint identified by unit Bw2X3jcqSAGLh98HVwM8Lx+Q3z5Z8gfKrdcGkxSPP34=
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): lock acquired [ '4ZFKFAMGQZQUITIU6XBFZKYWS7NRJ5RG' ]
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): Bw2X3jcqSAGLh98HVwM8Lx+Q3z5Z8gfKrdcGkxSPP34= validation {"error_code":"need_hash_tree","message":"ball nz9oM3hsBeq1fpFD5kgopUoimlu05mcOYQNnDmN5n1k= is not known in hash tree"} took 1ms
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): lock released [ '4ZFKFAMGQZQUITIU6XBFZKYWS7NRJ5RG' ]
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): handleQueue 0 items
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): handleQueue done 0 items
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): need hash tree for unit Bw2X3jcqSAGLh98HVwM8Lx+Q3z5Z8gfKrdcGkxSPP34=
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): lock released [ 'handleJoint' ]
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): handleQueue 0 items
Sat Oct 06 2018 19:22:23 GMT+0000 (UTC): handleQueue done 0 items
Sat Oct 06 2018 19:22:24 GMT+0000 (UTC): lock acquired [ 'saved_private' ]
Sat Oct 06 2018 19:22:24 GMT+0000 (UTC): lock released [ 'saved_private' ]
Sat Oct 06 2018 19:22:24 GMT+0000 (UTC): handleQueue 0 items
Sat Oct 06 2018 19:22:24 GMT+0000 (UTC): handleQueue done 0 items
Sat Oct 06 2018 19:22:28 GMT+0000 (UTC): 0 incoming connections, 1 outgoing connections, 0 outgoing connections being opened
Sat Oct 06 2018 19:22:29 GMT+0000 (UTC): queued jobs: [], locked keys: []
Sat Oct 06 2018 19:22:29 GMT+0000 (UTC): lock acquired [ 'saved_private' ]
Sat Oct 06 2018 19:22:29 GMT+0000 (UTC): lock released [ 'saved_private' ]
Sat Oct 06 2018 19:22:29 GMT+0000 (UTC): handleQueue 0 items
Sat Oct 06 2018 19:22:29 GMT+0000 (UTC): handleQueue done 0 items
Sat Oct 06 2018 19:22:31 GMT+0000 (UTC): lost units [ 'Bw2X3jcqSAGLh98HVwM8Lx+Q3z5Z8gfKrdcGkxSPP34=' ]
Sat Oct 06 2018 19:22:31 GMT+0000 (UTC): found next peer wss://byteball.org/bb

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.