bitshares / beet Goto Github PK
View Code? Open in Web Editor NEWBeet is a stand-alone key/identity-manager and signing app for BitShares, heavily influenced by Scatter.
License: MIT License
Beet is a stand-alone key/identity-manager and signing app for BitShares, heavily influenced by Scatter.
License: MIT License
Modify Beet so that each wallet can contain multiple sets of keys and accounts (as per reference UI wallet).
User can choose which account to associate with each requesting app.
When an app connects to Beet for the first time , it does so over an unencypted method call.
Upon connection, client lib provides a unique PIN visible to the user in the browser/app as well as in the Approval of connection request inside Beet.
User must verify the same PIN is visible prior to approving as well as choose an account (see #10 ) to use with the app. Once approved, client lib and Beet proceed to a key exchange and use a HOTP implementation to identify all subsequent requests & responses.
I imagine a popover on the bottom above the footer saying
Transaction <type> successfully broadcast
<link to explorer>
That disappears after 5 seconds
Ideally the user would first create a Beet wallet, and then go about adding accounts:
For creating a Beet wallet, I would suggest letting the user enter the wallet name and password on the same screen. Perhaps encourage a backup after the wallet is created. Then you can prompt user to add their first account.
For adding accounts, it would be helpful to have an "Add Account" title/header at the top. Also, I think you can let the user enter the blockchain and other info on the same screen.
By the way, is it really necessary (or even useful) to enter account name? Is it not the case that only the private keys are necessary (aside from bitshares cloud wallet) and the account name could then be be looked up?
Integrate an i18n localisation library and move all strings to it in preparation for UI translation.
Describe the bug
To Reproduce
Steps to reproduce the behavior:
Open Beet; Go to step 2 for Active/Memo key input
Click in Active key window; attempt to copy/paste the key into the window
Note that copy/paste is disabled; Input the Active key manually noting it scrolls outside the window
Click in the Memo key window; attempt to copy/paste the key into the window
Note that copy/paste is disabled; Input the Memo key manually noting it scrolls outside of the window
Note that tooltips throughout are generic in terms of direction to the user
Expected behavior
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Additional context
Best practice is never copy/paste keys, but eliminates human error entry.
Tooltip wording is crucial for the user to know exactly what is asked of them, especially when it involves keys.
Right now, the initial connection does no checks because each API action call is explicitly verified.
Upon completion of #9. Initial connection will request approval, connection of specific account and handshake but return no personal data. That will be left to the API calls.
This also modifies behaviour as discussed in #2.
Task is to match the style as seen in #34 (comment)
Due to a build process issue (couldnt get vue sass loader to work properly) npm run buildcss needs to be run to compile global sass files.
Styling the default combobox seems obnoxious (https://css-tricks.com/dropdown-default-styling/), switching to multiselect may be warranted (as seen here https://github.com/bitshares/beet/blob/develop/src/components/account-select.vue) and adjust it's styling to match.
Either solution is fine as long as the default combobox UX flow is maintained.
this.holder.btscompanion.connect('BitShares Voting Widget').then(connected => {
if(connected){
//this.btscompanion = btscompanion; Unbind from window and bind to your own state var to avoid extension hijacking
//window.btscompanion = null;
window.btscompanion.requestSignature({op_type: "transfer",op_data: {
"amount": {
"amount": 100000,
"asset_id": "1.3.0"
},
"extensions": [],
"fee": {
"amount": 10420,
"asset_id": "1.3.0"
},
"from": "1.2.386825",
"to": "1.2.386826"
}});
}
})
Executing the above will also trigger to access account ID
This popup should only appear when accountId is requested
Assuming completion of #10 , allow users to directly load their .bin UI wallet backup into Beet.
Optionally, allow export of Beet wallet to UI's .bin format.
Describe the bug
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Screenshots
See Gif
Desktop (please complete the following information):
Ref: https://electronjs.org/docs/tutorial/code-signing
We should look into this
Enable something like connection_list=await app.getChainConnection(['BTS','BTC'],true);
Is your feature request related to a problem? Please describe.
Consider a Local Wallet check box on Step 2 allowing .BIN import from a back up or storage device.
Describe the solution you'd like
Ability to utilize Beet for both local and cloud wallet users.
Describe the bug
No matter what I wrote the message was always 'text'.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
The text that I wrote appear as new message
Actual behavior
The text in new message was 'text'
Desktop (please complete the following information):
In case others have trouble with this, I solved this error by setting the NODE_ENV environment variable as follows:
set NODE_ENV=development
for more on this issue, refer here: electron/forge#367
When the user wants to update e.g. votes, the voting widget does not need to know the identiy stored in companion.
For that purpose a placeholder account id can be used, that the companion fills in when receiving a transaction, e.g. 1.2.0 (no one will sign as committee using companion).
Describe the bug
The signed message from beet is awkward. It appears to be key, value pairs, but really is not:
["from", "xeroc", "BTS5TPTziKkLexhVKsQKtSpo4bAv5RnB8oXcG4sMHEwCcTf3r7dqE", "time", "Fri, 29 Mar 2019 12:12:43 GMT", "text", "Login at bitshares.org on 2019/03/29 @ 12:12:40 UTC"]
The additional pubkey has no name
.
To Reproduce
use the example in examples
.
Expected behavior
I want the array to declare a name for the public key. E.g.
Additional context
Additionally, I believe that timestamps are easier to parse than human readable strings. Ultimately, no one will probably ever look into those messages anyways.
My particular use case is for login into a website using beet's signed message.
Currently claiming genesis Peerplays tokens requires signing into Peerplays core wallet using BTS private owner key (instructions below). It would be great if beet users could safely claim their Peerplays tokens using their BTS keys already stored in beet.
https://www.peerplays.com/wp-content/uploads/2017/11/Howto-Claim-Your-PPY-Tokens.pdf
Ideally, the developer must only call beet.get
and beet-js
recovers by itself unless a severe error occurs.
Assume that Beet and some app have linked, now user re-installs Beet and visits the site again. Site wants to authenticate using the existing link, but Beet does not know it.
Since the identityhash is deterministic, Beet calculates the idendityhash for all imported accounts that match the requested connection details. Two cases:
a) there is match with the client identityhash, user sees a popup in Beet, possibly with a refined message to notify the user of this anomaly, and connection is re-linked. Nothing changes for the developer on the client side
b) there is no match with the client idendityhash. Beet sends an error to the client, and the client has two choices: either destroy the local identityhash and re-link (can happen automatically), or notify the user there and give him a chance to import the correct keys in Beet
Of the four icons at the bottom, only two have a readily apparent purpose (gear and lock). Of the other two, one is unnecessary and the other is misplaced. I would put the settings gear and lock icons in the upper right. I would remove the graph icon since the user can just close the settings (with a "Back" or "Return" button) to go back to the main screen (where the accounts are listed). And finally, you can have a [+] add account button next to the accounts drop down list.
Alternatively, you can have tabs at the top where "Accounts" is one tab and "Tools/Settings" is another, and you can add additional tabs if/when needed in the future. Under settings you can have sub-items such as below.
Tab 1: Accounts
Tab 2: Tools/Settings
Is your feature request related to a problem? Please describe.
I want to be able to setup multisig system that consists of a client (beet) and a server. Both need to sign a transaction.
Describe the solution you'd like
The process I have in mind looks like this:
Describe alternatives you've considered
The alternative would be to do it the other way round and let the server sign first. The difference should be minimal as you just have to keep track of a potentially existing signature in the to-be-signed transaction.
Additional context
We would like to be able to improve security by removing the potential of the server-installed private key to do anything without the approval of a local signature.
npm
locally according to the readme and are able to read javascriptThe UI design will be handled by the winner of the Beet logo contest (https://whaleshares.io/art/@pixel/beet-artcontest-bring-life-to-beet)
Beet UX is bootstrap based.
This is a list of things we're going to need:
Is your feature request related to a problem? Please describe.
Other graphene-based blockchains are facing a similar problem that beet is solving: Trust in third party apps. Some other chains may even experience this as a bigger problem, such as PeerPlays Blockchain which would like to allow 3rd party game developers to develop custom games.
Describe the solution you'd like
I'd like beet to be able to not only speak/sign for BitShares, but also other chains (e.g. PeerPlays, SoundDac, Decent, ....).
Describe alternatives you've considered
Forking + Customization
Additional context
Basically, the app could have a slider of some kind to define which chain you want to talk to. Then, the app would load chain-specific plugins/jslibrary and offer chain-specific API calls.
Implement a Vuex store as a state container and remove unnecessary reference passing, globals etc. from the existing codebase.
Describe the bug
Load time for the app was roughly 75 seconds.
After it loaded, it flashed, followed by another window.
Maybe not an error (assuming flash is seeking a wallet) but the load time is notable.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
See #91
To test the transfer open the corresponding example in beet-js while running beet.
https://github.com/bitshares/beet-js/blob/90b8ad8eb472af96ab59fc48e5785c9844343180/examples/transfer/eos.html#L4
The code in beet is found here:
beet/src/lib/blockchains/EOSmainnet.js
Line 152 in dd3ea27
I want to be able to support the transfer of any EOSIO token, and the action I implemented is probably wrong and only for EOS.
Is your feature request related to a problem? Please describe.
I want to be able to setup an HTLC on bitcoin
Describe the solution you'd like
Use BIP199 to setup CSV/HTLC on bitcoin
Additional context
BIP199:
https://github.com/bitcoin/bips/blob/master/bip-0199.mediawiki
Some basic example code (unittest):
https://github.com/bitcoinjs/bitcoinjs-lib/blob/3588d1100f82af1718e0a2b0c91db1d33a4204b0/test/integration/csv.js#L38-L95
Some implementation (submorineswaps):
https://github.com/submarineswaps/swaps-service/tree/master/swaps
Finalize or hide for beta
Tasks & work prior to UI worker inclusion.
Closed via e520d25
Since Store will be split into multiple modules for maintainability, what was originally the complete BeetStore will now host wallet related stuff only thus should be renamed to WalletStore in the codebase.
When creating an account the owner key must be entered, otherwise an exception is thrown after entering wallet password.
Furthermore, the default question should be to collect active and memo. The field to enter owner key could appear when a small button "Include owner key" or similar is clicked.
Is your feature request related to a problem? Please describe.
I was thinking a checkbox to "auto close the app after xx time" might be a good option. But, how could that be done in the event that a transaction occurs, a back up is mandated, but the user is either unavailable, device is lost, stolen, away from backup device, etc?
With that said, I am curious as to how Beet would currently handle an instance where a user accesses the app, makes transactions, and experiences a power failure, reboot, loss of connection, or back up needed?
Describe the bug
Cannot copy-paste my private keys into beet app.
Looks like hotkeys doesn't work when cursor is inside fields. I cannot even copy my username using cmd+a (after I typed it manually)
Desktop (please complete the following information):
Run Beet from any branch (master/develop/Steem-Support) and run the new example from beet-js (bitshares/beet-js#10)
Notice:
Line 67 in 4d13827
Also see the uncommented lines in new example from beet-js. Put them back in to get a different strange id mismatch bug
Any ideas / pointers?
This is to ensure we do our best to stay connected to the best possible node.
Especially important on first use as we want the wizard to be very simple and avoid adding node-selection until wallet has been created and user is at Dashboard screen.
@sschiessl-bcp How easy would it be to port your node-selection code over?
This also solves the occasional hardcoded node failure as in #6.
The reference UI always has the problem that it can't keep up with the scammers. Should we have an on-chain blacklist?
version
call returns ui
and api
version. Beet and client with same api
level are considered compatible.
Current routing is to /
after restoring, which causes user to enter password again.
Routing should be to /dashboard
after restoring, but getting the error
2019-04-13 23:06:16 GMT+2 - [ERROR] TypeError: Cannot read property 'chain' of undefined
at VueComponent.selectedChain (/home/schiessl/Projekte/BitShares/beet/src/components/dashboard.vue:116:41)
Similar to the UI beet should be build automatically for tags on master branch. This is issue is to track progress on it.
The build process will be done by a separate github account made for that purpose @bitshares-ui-automation
Open Beet, attempt to add account (add-account.vue), and observe the combobox
Task is to match this with the style guide #34 (comment)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.