Giter Site home page Giter Site logo

javascript-sdk's Introduction

The BNB Beacon Chain JavaScript SDK allows browsers and Node.js clients to interact with BNB Beacon Chain. It includes the following core components.

  • crypto - core cryptographic functions.
  • amino - amino (protobuf-like) encoding and decoding of transactions.
  • client - implementations of BNB Beacon Chain transaction types, such as for transfers and trading.
  • accounts - management of "accounts" and wallets, including seed and encrypted mnemonic generation.
  • ledger - Ledger Nano S/X support via HID, U2F and Web BLE (Bluetooth).
  • rpc - Node RPC client.
  • transaction - Transaction Class, build and sign.

You can find more detailed documentation and examples in our Documentation pages.

Installation

If you do not need Ledger support with Node.js:

$ npm i @bnb-chain/javascript-sdk --no-optional
# Or:
$ yarn add @bnb-chain/javascript-sdk --no-optional

If you need Ledger support with Node.js:

$ npm i @bnb-chain/javascript-sdk
# Or:
$ yarn add @bnb-chain/javascript-sdk

Prerequisites

  • Windows users: Please install windows-build-tools first.

  • Mac users: Make sure XCode Command Line Tools are installed: xcode-select --install.

  • Linux users: Note that Ubuntu Xenial and newer distributions are recommended, especially when using Travis or other CI systems. You may need some dev packages to be installed on your system for USB support. On Debian-based distributions (like Ubuntu) you should install them with this command:

    $ sudo apt-get install libudev-dev libusb-dev usbutils

Use with Webpack

We often see Webpack builds failing with the SDK due to the usb dependency, but adding this to your Webpack config should fix that:

module.exports = {
  plugins: [new webpack.IgnorePlugin(/^usb$/)],
}

Testing

All new code changes should be covered with unit tests. You can run the tests with the following command:

$ yarn test

Tests for the Ledger hardware wallet integration have their own suite that runs in both node and in the browser:

$ yarn test:ledger
$ yarn test:ledger:browser

Contributing

Contributions to the BNB Beacon Chain JavaScript SDK are welcome. Please ensure that you have tested the changes with a local client and have added unit test coverage for your code.

javascript-sdk's People

Contributors

0x4byte avatar anderson-juhasc avatar artall64 avatar bitcoinbrisbane avatar dependabot[bot] avatar feri42 avatar fiowind avatar ivanzhelyazkov avatar joeneldeasis avatar jpopxfile avatar k1rill-fedoseev avatar kaiansaari avatar nilpuig avatar notatestuser avatar randyahx avatar robot-ux avatar roman-vanesyan avatar rumeelhussainbnb avatar sectore avatar sokkary avatar stuartwk avatar veado avatar x713-ux avatar xzjcool avatar youaresofunny 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  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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

javascript-sdk's Issues

How to create wallet as same as BIP32

Hello ,
My previous issue is closed but it does not answer my question so I create a new issue again.

I want BIP32 ( Hierarchical Deterministic wallet ,HD Wallet ). The sample code should be BIP39

This is BIP32 in ethereum.
https://www.npmjs.com/package/hdkey

var seed = 'fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5784542'
var hdkey = HDKey.fromMasterSeed(Buffer.from(seed, 'hex'))

// single wallet
//////////////////////////////////////
var childkey = hdkey.derive("m/0/2147483647'/1")
 
console.log(childkey.privateExtendedKey)
// -> "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef"
console.log(childkey.publicExtendedKey)
// -> "xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon"
//////////////////////////////////////////

// 10 wallets
//////////////////////////////////////////
const walletPub = HDKey.fromExtendedKey(childkey.publicExtendedKey)
for (var idx = 0; idx < 10; idx++) {
  console.log(
    '\t' +
      walletPub 
        .deriveChild(idx)
        .getWallet()
        .getAddressString()
  )
}
//////////////////////////////////////////

Qestion

This is not javascript_sdk.
I have designed .Net_SDK (C#) for binance dex.
How to send it for binance dex team to verify it ?

[egg-scripts] Failed to initialize libusb.

At the time of development,It's ok
npm run dev

When I deploy
npm start

got error


[egg-scripts] Save log file to /root/logs
[egg-scripts] Wait Start: 1...
[egg-scripts] Wait Start: 2...
[egg-scripts] tail -n 100 /root/logs/master-stderr.log
[egg-scripts] Got error when startup:
[egg-scripts] Failed to initialize libusb.
[egg-scripts] Failed to initialize libusb.
[egg-scripts] Failed to initialize libusb.
[egg-scripts]
[egg-scripts] Start got error, see /root/logs/master-stderr.log
[egg-scripts] Or use `--ignore-stderr` to ignore stderr at startup.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `egg-scripts start --daemon --title=egg-server`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-06-14T08_20_25_139Z-debug.log

Is there support for getting transaction history or updates using Javascript-SDK?

Hello,

I have implemented the Javascript-SDK, using which I was able to perform transfer, getAccount, getBalance etc. However, I couldn't find a way to receive transaction updates either via REST API or Websockets in the Javascript-SDK.

Can we use our own local node with the Javascript-SDK?

For example: I am creating the instance of the BnbClient using below line of code:
const bnbClient = new BnbApiClient('https://testnet-dex.binance.org/');

Regards,
Saarang Tiwari

SyntaxError error for "javascript-sdk/wiki/API-Examples"

Dear team,

While i was trying to play around "wallet-to-wallet transfer" following the codes from "https://github.com/binance-chain/javascript-sdk/wiki/API-Examples", seems like the code has syntax error for these piece of codes:

httpClient
  .get(sequenceURL)
  .then((response) => {
    const sequence = response.data.sequence || 0;
  .then((res) => {
      bnbClient.transfer(addressFrom, addressTo, amount, asset, message, sequence)
        .then((result) => {
          console.log(result);
          if (result.status === 200) {
            console.log('success', result.result[0].hash);
          } else {
            console.error('error', result);
          }
        })
        .catch((err) => {
          console.error('error', err);
        });
    })
      .catch((error) => {
        console.error('error', error);
      });
  })
  .catch((error) => {
    console.log(error);
  });

May change to:

httpClient
  .get(sequenceURL)
  .then((res) => {
      const sequence = res.data.sequence || 0
      return bnbClient.transfer(addressFrom, addressTo, amount, asset, message, sequence)
  })
  .then((result) => {
      console.log(result);
      if (result.status === 200) {
        console.log('success', result.result[0].hash);
      } else {
        console.error('error', result);
      }
  })
  .catch((error) => {
    console.error('error', error);
  });

which works for me :)

createOrder throw exception

While I call the createOrder, it throws the exception like this:

'the order ID(CF16D7C101B40862CDB5DA498D4053F646B8EB7B-2) given did not match the expected one: `CF16D7C101B40862CDB5DA498D4053F646B8EB7B-7`'

this.bnbClient.placeOrder(address, 'ONE-5F9_BNB', 1, 0.00070000, 1000, 1)

Could you please help take a look?

Ledger support

  • Basic wallet management / transactions
  • Multi-token balances and transfers
  • Nice to have: multi-address (HD path) support

JSDoc comments

Make sure all public methods have proper JSDoc comments.

http://usejsdoc.org

Files missing complete jsdoc coverage:

  • src/client/index.js
  • src/crypto/index.js
  • src/encoder/index.js
  • src/encoder/varint.js
  • src/tx/index.js
  • src/utils/encoderHelper.js
  • src/utils/index.js

Migrate hex strings to Buffer objects

Most API methods now (especially utils) use hex strings, and others consume/return Buffer. We should use Buffer everywhere, as it is more modern, efficient and flexible (e.g. getting hex is as simple as buffer.toString("hex"))

keystore: support scrypt/argon2 kdf

We generate keystores using the pbkdf2 kdf for now, but there are more secure options out there such as argon2 (preferred) and scrypt. We should retain support for unlocking pbkdf2 keystores.

PlaceOrder worked yesterday. Not today. No code changes. What gives?

C:\Users\Alexander Bradley\Documents\binance\comp>node test.js

error in HttpRequest#request { Error: Request failed with status code 401
at createError (C:\Users\Alexander Bradley\Documents\binance\comp\node_modules\axios\lib\core\createError.js:16:15)
at settle (C:\Users\Alexander Bradley\Documents\binance\comp\node_modules\axios\lib\core\settle.js:18:12)
at IncomingMessage.handleStreamEnd (C:\Users\Alexander Bradley\Documents\binance\comp\node_modules\axios\lib\adapters\http.js:201:11)
at IncomingMessage.emit (events.js:193:15)
at endReadableNT (_stream_readable.js:1129:12)
at process.internalTickCallback (internal/process/next_tick.js:72:19)
config:
{ adapter: [Function: httpAdapter],
transformRequest: { '0': [Function: transformRequest] },
transformResponse: { '0': [Function: transformResponse] },
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
headers:
{ Accept: 'application/json, text/plain, /',
'Content-Type': 'text/plain',
'User-Agent': 'axios/0.18.0',
'Content-Length': 444 },
method: 'post',
baseURL: 'https://testnet-dex.binance.org/',
url: 'https://testnet-dex.binance.org/api/v1/broadcast?sync=true',
data:
'dc01f0625dee0a64ce6dc0430a14c6c68e35e190e8f1177594402bae86edc1ddf313122a433643363845333545313930453846313137373539343430324241453836454443314444463331332d311a0d424e425f4254432e422d3931382002280230f0e9163880c2d72f4003126e0a26eb5ae9872102223ce545a3af8adaddb30858106abcf9ae4e78975cb78bca65caf198a90c7f651240631dad796fdaf725940c21f39ad6d907b9bc3ecb72d6c109279ce736438f8cce4bf041cbd6a0d8b020c6222e3fab74dd47f1bdbef1cd654e81c18f2844bbecd918b1f2062001' },
request:
ClientRequest {
_events:
[Object: null prototype] {
socket: [Function],
abort: [Function],
aborted: [Function],
error: [Function],
timeout: [Function],
prefinish: [Function: requestOnPrefinish] },
_eventsCount: 6,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket:
TLSSocket {
_tlsOptions: [Object],
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
_SNICallback: null,
servername: 'testnet-dex.binance.org',
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events: [Object],
_eventsCount: 8,
connecting: false,
_hadError: false,
_handle: [TLSWrap],
_parent: null,
_host: 'testnet-dex.binance.org',
_readableState: [ReadableState],
readable: true,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: [TLSWrap],
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular],
[Symbol(res)]: [TLSWrap],
[Symbol(asyncId)]: 67,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: [Object] },
connection:
TLSSocket {
_tlsOptions: [Object],
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
_SNICallback: null,
servername: 'testnet-dex.binance.org',
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events: [Object],
_eventsCount: 8,
connecting: false,
_hadError: false,
_handle: [TLSWrap],
_parent: null,
_host: 'testnet-dex.binance.org',
_readableState: [ReadableState],
readable: true,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: [TLSWrap],
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular],
[Symbol(res)]: [TLSWrap],
[Symbol(asyncId)]: 67,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: [Object] },
_header:
'POST /api/v1/broadcast?sync=true HTTP/1.1\r\nAccept: application/json, text/plain, /\r\nContent-Type: text/plain\r\nUser-Agent: axios/0.18.0\r\nContent-Length: 444\r\nHost: testnet-dex.binance.org\r\nConnection: close\r\n\r\n',
_onPendingData: [Function: noopPendingOutput],
agent:
Agent {
_events: [Object],
_eventsCount: 1,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object],
requests: {},
sockets: [Object],
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
maxCachedSessions: 100,
_sessionCache: [Object] },
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/api/v1/broadcast?sync=true',
_ended: true,
res:
IncomingMessage {
_readableState: [ReadableState],
readable: false,
_events: [Object],
_eventsCount: 3,
_maxListeners: undefined,
socket: [TLSSocket],
connection: [TLSSocket],
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: true,
headers: [Object],
rawHeaders: [Array],
trailers: {},
rawTrailers: [],
aborted: false,
upgrade: false,
url: '',
method: null,
statusCode: 401,
statusMessage: 'Unauthorized',
client: [TLSSocket],
_consuming: false,
_dumped: false,
req: [Circular],
responseUrl: 'https://testnet-dex.binance.org/api/v1/broadcast?sync=true',
redirects: [] },
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
_redirectable:
Writable {
_writableState: [WritableState],
writable: true,
_events: [Object],
_eventsCount: 2,
_maxListeners: undefined,
_options: [Object],
_ended: true,
_ending: true,
_redirectCount: 0,
_redirects: [],
_requestBodyLength: 444,
_requestBodyBuffers: [],
_onNativeResponse: [Function],
_currentRequest: [Circular],
_currentUrl: 'https://testnet-dex.binance.org/api/v1/broadcast?sync=true' },
[Symbol(isCorked)]: false,
[Symbol(outHeadersKey)]:
[Object: null prototype] {
accept: [Array],
'content-type': [Array],
'user-agent': [Array],
'content-length': [Array],
host: [Array] } },
response:
{ status: 401,
statusText: 'Unauthorized',
headers:
{ 'content-type': 'application/json',
'content-length': '122',
connection: 'close',
date: 'Fri, 08 Mar 2019 11:41:12 GMT',
'x-ratelimit-limit-second': '5',
'x-ratelimit-remaining-second': '4',
'x-ratelimit-limit-minute': '300',
'x-ratelimit-remaining-minute': '299',
'access-control-allow-origin': '*',
'cache-control': 'no-cache, no-store, must-revalidate',
'strict-transport-security': 'max-age=31536000',
'x-kong-upstream-latency': '2',
'x-kong-proxy-latency': '1',
via:
'kong/0.14.1, 1.1 b140ebac2d560cbb139c002477015c3a.cloudfront.net (CloudFront)',
'x-frame-options': 'SAMEORIGIN',
'x-xss-protection': '1; mode=block',
'x-content-type-options': 'nosniff',
'referrer-policy': 'origin-when-cross-origin',
'x-cache': 'Error from cloudfront',
'x-amz-cf-id': 'xkMPzTYDb11WVcNiRUd4oyQtxKio8yQRyMU6XOyRjsF6qQahPE9F5g==' },
config:
{ adapter: [Function: httpAdapter],
transformRequest: [Object],
transformResponse: [Object],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
headers: [Object],
method: 'post',
baseURL: 'https://testnet-dex.binance.org/',
url: 'https://testnet-dex.binance.org/api/v1/broadcast?sync=true',
data:
'dc01f0625dee0a64ce6dc0430a14c6c68e35e190e8f1177594402bae86edc1ddf313122a433643363845333545313930453846313137373539343430324241453836454443314444463331332d311a0d424e425f4254432e422d3931382002280230f0e9163880c2d72f4003126e0a26eb5ae9872102223ce545a3af8adaddb30858106abcf9ae4e78975cb78bca65caf198a90c7f651240631dad796fdaf725940c21f39ad6d907b9bc3ecb72d6c109279ce736438f8cce4bf041cbd6a0d8b020c6222e3fab74dd47f1bdbef1cd654e81c18f2844bbecd918b1f2062001' },
request:
ClientRequest {
_events: [Object],
_eventsCount: 6,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: [TLSSocket],
connection: [TLSSocket],
_header:
'POST /api/v1/broadcast?sync=true HTTP/1.1\r\nAccept: application/json, text/plain, /\r\nContent-Type: text/plain\r\nUser-Agent: axios/0.18.0\r\nContent-Length: 444\r\nHost: testnet-dex.binance.org\r\nConnection: close\r\n\r\n',
_onPendingData: [Function: noopPendingOutput],
agent: [Agent],
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/api/v1/broadcast?sync=true',
_ended: true,
res: [IncomingMessage],
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
_redirectable: [Writable],
[Symbol(isCorked)]: false,
[Symbol(outHeadersKey)]: [Object] },
data:
{ code: 65540,
message:
'{"codespace":1,"code":4,"abci_code":65540,"message":"signature verification failed"}' } } }
error { Error: signature verification failed
at C:\Users\Alexander Bradley\Documents\binance\comp\node_modules@binance-chain\javascript-sdk\lib\utils\request.js:71:21
at process.internalTickCallback (internal/process/next_tick.js:77:7) code: 4, abci_code: 65540 }

crypto.generateSignature: error TypeError: Expected Private

Tried to follow code from tests (https://github.com/binance-chain/javascript-sdk/blob/master/__tests__/client.test.js) and example from wiki (https://github.com/binance-chain/javascript-sdk/wiki/API-Examples)

in all of them I get "TypeError: Expected Private" when calling to transfer

bnbClient.transfer(addressFrom, addressTo, amount, asset)

error:
error TypeError: Expected Private
at Object.generateSignature (/Users/talbeery/WebstormProjects/Binance-test/node_modules/@binance-chain/javascript-sdk/lib/crypto/index.js:199:41)
at Transaction.sign (/Users/talbeery/WebstormProjects/Binance-test/node_modules/@binance-chain/javascript-sdk/lib/tx/index.js:141:30)
at BncClient._callee$ (/Users/talbeery/WebstormProjects/Binance-test/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:54:49)
at tryCatch (/Users/talbeery/WebstormProjects/Binance-test/node_modules/regenerator-runtime/runtime.js:65:40)
at Generator.invoke [as _invoke] (/Users/talbeery/WebstormProjects/Binance-test/node_modules/regenerator-runtime/runtime.js:303:22)
at Generator.prototype.(anonymous function) [as next] (/Users/talbeery/WebstormProjects/Binance-test/node_modules/regenerator-runtime/runtime.js:117:21)
at asyncGeneratorStep (/Users/talbeery/WebstormProjects/Binance-test/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:26:103)
at _next (/Users/talbeery/WebstormProjects/Binance-test/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:28:194)
at /Users/talbeery/WebstormProjects/Binance-test/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:28:364
at new Promise ()

Calling directly to

crypto.generateSignature('aaaaaa', bnbClient.privateKey);

gives the same error

placeOrder error

testing environment:https://testnet-dex.binance.org
Why do you report this error without the chain ID parameter
Error: chain id should not be null

TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or
array-like object.
My first parameter is the string. Why did I report this error?

keypair.getPublic(...).encode is not a function

Hello

I Just Implement BNB Implementation using javascript SDK but while generate public key got following error from sdk library please help out for this

TypeError: keypair.getPublic(...).encode is not a function

Enabling jdk for mainnet

I am connected to mainnet through dex.binance.org and I am converting private key to address, in that process I am getting a ''tbnb'' prefixed address.

How can I switch that behavior?

Serialization for Transaction

To allow sophisticated use of the Signing (see here) and Broadcast delegate, serialization and de-serialization of the Transaction class and the signMsg must be possible at all states of it (unsigned and signed).

I would propose to add a toJSON and static fromJSON method that will allow usage of JSON stringify and JSON parse.

Invalid address

Hello everyone

this issue is related to javascript_SDK and java_SDK if https://testnet.binance.org use javascript_sdk .

i use this private key to get address : 90335b9d2153ad1a9799a3ccc070bd64b4164e9642ee1dd48053c33f9a3a05e9

but returned address in java_sdk and https://testnet.binance.org is differ
address from JAVA_SDK : bnc1hgm0p7khfk85zpz5v0j8wnej3a90w7098fpxyh
address from testnet.binanace.org : tbnb1hgm0p7khfk85zpz5v0j8wnej3a90w709zzlffd

i know bnc or tbnb is hrp and there is 1hgm0p7khfk85zpz5v0j8wnej3a90w709 in both

Inconsistency with documentation and API

Hi Binance Chain team, when I am trying Binance js sdk I found that some methods in API Documentation are not implemented (eg. getClientKeyAddress()) and some methods (eg. initChain(), setPrivateKey()) are not recorded in API Documentation.

bnb transaction decode

hello,

I tried to use RPC to read each transaction in single block. I used command like https://seed1.longevito.io/block?height=8737140

What I found in the result is that txs are sort of encoded in some way. for example:
"data": { "txs": [ "4wHwYl3uCmjObcBDChR+NoVC8WSqtpuzHENnYAtG+wFJFBIuN0UzNjg1NDJGMTY0QUFCNjlCQjMxQzQzNjc2MDBCNDZGQjAxNDkxNC0xODU0OBoLUEhCLTJERl9CTkIgAigBMJusBTiAgJPotRVAARJxCibrWumHIQIO+XNEPzoixFyv5bUDgbweD5e+EjSFGwX//GAJFZD6WxJAcWgjCaBpxQv2UyLY6YZ4Wlfx15Gef8tmDmvAVRhOIiVIC42szyer9pDN0V++btg/rC+Jkwq/O9enOE+fNGlF3xitYCDzkAEgAw==", "4wHwYl3uCmjObcBDChTEji7BGx0OHFcQP/JQDSQtYg02XRIuQzQ4RTJFQzExQjFEMEUxQzU3MTAzRkYyNTAwRDI0MkQ2MjBEMzY1RC0xODA3NBoLUEhCLTJERl9CTkIgAigBMLO8BTiA0JCL3xJAARJxCibrWumHIQNUw+T33B4h3E01t9QXuQbcU5YmhaiKdo3us7VAiCNMmBJAxn7WNtJKq5C97m96oFS5NVzuTNsk8Gfuk+e7g7l8prBDEYqrlwq4wUb8WswzpPaiV44mmfCpNnP35y21FBmKPxirYCCZjQEgAw==", "0wHwYl3uCk4qLIf6CiMKFJGTdSD0BFj1tBTSZ5YbRsGXid1wEgsKA0JOQhDgj/WsAxIjChSOpw19LqihS6KzPRjV371vrgpuqBILCgNCTkIQ4I/1rAMScAom61rphyEDVuClgDiab9LMkc1SXG1aTYBUr3DfF0hOWGePn1dKC00SQKstbRg7fwGp4DZbIgJx1NDinXG//SgjbAzXiWmXp5nbGZ5hxUnFReCTqeGyw9AbnHRRT7VW47k+zxF8PDn2cEIYMyD39AEaCTEwNTUyNDAwMCAC" ]

How can I decode this tx info?

Thanks

Npm installation issue

Not directly related to the library itseflt, but i could not get install the npm package:

npm ERR! code E404
npm ERR! 404 Not Found: @binance-chain/javascript-sdk@latest

Multiple instance of babel-polyfill

Hello,

As per babel documentation, polyfill shouldn't be used inside libraries but inside applications
This actually cause my Express app to crash when I try to implement BinanceCoin & BinanceChain into it

This is the error I am getting after downloading & implement the javascript-sdk.
Error: only one instance of babel-polyfill is allowed

Could you please consider moving away from babel-polyfill inside the SDK and migrate to transform-runtime ? as I can't get ride of it nor implement a check inside it to check if polyfill is already imported...

Reference: lebab/lebab#249 (comment)

Thanks

regeneratorRuntime is not defined (babel-polyfill)

Code:

const BnbApiClient = require("@binance-chain/javascript-sdk")
const bnbClient = new BnbApiClient("https://dex.binance.org")

Error:

~/project/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:54
regeneratorRuntime.mark(function _callee(tx, signMsg) {
^

    ReferenceError: regeneratorRuntime is not defined
    at ~/project/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:54:3
    at Object.<anonymous> (~/project/node_modules/@binance-chain/javascript-sdk/lib/client/index.js:72:2)
    at Module._compile (internal/modules/cjs/loader.js:799:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:810:10)
    at Module.load (internal/modules/cjs/loader.js:666:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:606:12)
    at Function.Module._load (internal/modules/cjs/loader.js:598:3)
    at Module.require (internal/modules/cjs/loader.js:705:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (~/project/node_modules/@binance-chain/javascript-sdk/lib/index.js:3:38)

Code crashes on first line, when trying to load sdk. I'm pretty sure #111 is related

How to catch exceptions?

Looks like exception catches in getAccount and just log it inside. How to catch it myself? And note last lines in output.

const ax = require('axios')
const BnbApiClient = require('@binance-chain/javascript-sdk');

const l = x => console.log(JSON.stringify(x, null, 2))

const ad = 'tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs'
const pk = '1a16367e435c0fc02a4e940e1a5e3b1288c0101b85ef5872bcb7b9de840238e2'

;(async() => {
  try {
    // const{data} = await ax('https://testnet-dex.binance.org/')
    // l(data)
    // return

    l(1)
    const bnbClient = new BnbApiClient('https://testnet-dex.binance.org/');

    l(2)

    // await bnbClient.setPrivateKey(pk)
    bnbClient.chooseNetwork("testnet"); // or this can be "mainnet"
    bnbClient.initChain();

    const addr = bnbClient.getAccount(ad);
    l({addr})

    // const a = bnbClient.createAccountWithKeystore('pass');
    // l(a)

  } catch(e) {
    console.log(111, e.request)
  }
})()

Outputs:

1
2
error in HttpRequest#request { Error: Request failed with status code 404
    at createError (/root/projects/test/node_modules/@binance-chain/javascript-sdk/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/root/projects/test/node_modules/@binance-chain/javascript-sdk/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/root/projects/test/node_modules/@binance-chain/javascript-sdk/node_modules/axios/lib/adapters/http.js:237:11)
    at IncomingMessage.emit (events.js:198:15)
    at endReadableNT (_stream_readable.js:1139:12)
    at processTicksAndRejections (internal/process/task_queues.js:81:17)
  config:
   { url:
      'https://testnet-dex.binance.org/api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs',
     method: 'get',
     headers:
      { Accept: 'application/json, text/plain, */*',
        'User-Agent': 'axios/0.19.0' },
     baseURL: 'https://testnet-dex.binance.org/',
     transformRequest: [ [Function: transformRequest] ],
     transformResponse: [ [Function: transformResponse] ],
     timeout: 0,
     adapter: [Function: httpAdapter],
     xsrfCookieName: 'XSRF-TOKEN',
     xsrfHeaderName: 'X-XSRF-TOKEN',
     maxContentLength: -1,
     validateStatus: [Function: validateStatus],
     data: undefined },
  request:
   ClientRequest {
     _events:
      [Object: null prototype] {
        socket: [Function],
        abort: [Function],
        aborted: [Function],
        error: [Function],
        timeout: [Function],
        prefinish: [Function: requestOnPrefinish] },
     _eventsCount: 6,
     _maxListeners: undefined,
     outputData: [],
     outputSize: 0,
     writable: true,
     _last: true,
     chunkedEncoding: false,
     shouldKeepAlive: false,
     useChunkedEncodingByDefault: false,
     sendDate: false,
     _removedConnection: false,
     _removedContLen: false,
     _removedTE: false,
     _contentLength: 0,
     _hasBody: true,
     _trailer: '',
     finished: true,
     _headerSent: true,
     socket:
      TLSSocket {
        _tlsOptions: [Object],
        _secureEstablished: true,
        _securePending: false,
        _newSessionPending: false,
        _controlReleased: true,
        _SNICallback: null,
        servername: 'testnet-dex.binance.org',
        alpnProtocol: false,
        authorized: true,
        authorizationError: null,
        encrypted: true,
        _events: [Object],
        _eventsCount: 9,
        connecting: false,
        _hadError: false,
        _parent: null,
        _host: 'testnet-dex.binance.org',
        _readableState: [ReadableState],
        readable: true,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: undefined,
        _server: null,
        ssl: [TLSWrap],
        _requestCert: true,
        _rejectUnauthorized: true,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(res)]: [TLSWrap],
        [Symbol(asyncId)]: 28,
        [Symbol(kHandle)]: [TLSWrap],
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0,
        [Symbol(connect-options)]: [Object] },
     connection:
      TLSSocket {
        _tlsOptions: [Object],
        _secureEstablished: true,
        _securePending: false,
        _newSessionPending: false,
        _controlReleased: true,
        _SNICallback: null,
        servername: 'testnet-dex.binance.org',
        alpnProtocol: false,
        authorized: true,
        authorizationError: null,
        encrypted: true,
        _events: [Object],
        _eventsCount: 9,
        connecting: false,
        _hadError: false,
        _parent: null,
        _host: 'testnet-dex.binance.org',
        _readableState: [ReadableState],
        readable: true,
        _maxListeners: undefined,
        _writableState: [WritableState],
        writable: false,
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: undefined,
        _server: null,
        ssl: [TLSWrap],
        _requestCert: true,
        _rejectUnauthorized: true,
        parser: null,
        _httpMessage: [Circular],
        [Symbol(res)]: [TLSWrap],
        [Symbol(asyncId)]: 28,
        [Symbol(kHandle)]: [TLSWrap],
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0,
        [Symbol(connect-options)]: [Object] },
     _header:
      'GET /api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.19.0\r\nHost: testnet-dex.binance.org\r\nConnection: close\r\n\r\n',
     _onPendingData: [Function: noopPendingOutput],
     agent:
      Agent {
        _events: [Object],
        _eventsCount: 1,
        _maxListeners: undefined,
        defaultPort: 443,
        protocol: 'https:',
        options: [Object],
        requests: {},
        sockets: [Object],
        freeSockets: {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256,
        maxCachedSessions: 100,
        _sessionCache: [Object] },
     socketPath: undefined,
     timeout: undefined,
     method: 'GET',
     path:
      '/api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs',
     _ended: true,
     res:
      IncomingMessage {
        _readableState: [ReadableState],
        readable: false,
        _events: [Object],
        _eventsCount: 3,
        _maxListeners: undefined,
        socket: [TLSSocket],
        connection: [TLSSocket],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Array],
        trailers: {},
        rawTrailers: [],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 404,
        statusMessage: 'Not Found',
        client: [TLSSocket],
        _consuming: false,
        _dumped: false,
        req: [Circular],
        responseUrl:
         'https://testnet-dex.binance.org/api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs',
        redirects: [] },
     aborted: false,
     timeoutCb: null,
     upgradeOrConnect: false,
     parser: null,
     maxHeadersCount: null,
     _redirectable:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _redirectCount: 0,
        _redirects: [],
        _requestBodyLength: 0,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [Circular],
        _currentUrl:
         'https://testnet-dex.binance.org/api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs' },
     [Symbol(isCorked)]: false,
     [Symbol(outHeadersKey)]:
      [Object: null prototype] { accept: [Array], 'user-agent': [Array], host: [Array] } },
  response:
   { status: 404,
     statusText: 'Not Found',
     headers:
      { 'content-type': 'application/json',
        'content-length': '0',
        connection: 'close',
        date: 'Wed, 12 Jun 2019 05:16:09 GMT',
        'x-ratelimit-limit-second': '5',
        'x-ratelimit-remaining-second': '4',
        'x-ratelimit-limit-minute': '300',
        'x-ratelimit-remaining-minute': '299',
        'access-control-allow-origin': '*',
        'cache-control': 'no-cache, no-store, must-revalidate',
        'strict-transport-security': 'max-age=31536000',
        'x-kong-upstream-latency': '2',
        'x-kong-proxy-latency': '0',
        via:
         'kong/0.14.1, 1.1 5f77bd93eaeac8e32d1c411a80449035.cloudfront.net (CloudFront)',
        'x-frame-options': 'SAMEORIGIN',
        'x-xss-protection': '1; mode=block',
        'x-content-type-options': 'nosniff',
        'referrer-policy': 'origin-when-cross-origin',
        'x-cache': 'Error from cloudfront',
        'x-amz-cf-id': 'GfkponeFETaeg1CTzj8Mx9aqRw5h6bLIJ9rbOdeTn7DxvOiGMW9xYQ==' },
     config:
      { url:
         'https://testnet-dex.binance.org/api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs',
        method: 'get',
        headers: [Object],
        baseURL: 'https://testnet-dex.binance.org/',
        transformRequest: [Array],
        transformResponse: [Array],
        timeout: 0,
        adapter: [Function: httpAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        validateStatus: [Function: validateStatus],
        data: undefined },
     request:
      ClientRequest {
        _events: [Object],
        _eventsCount: 6,
        _maxListeners: undefined,
        outputData: [],
        outputSize: 0,
        writable: true,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        socket: [TLSSocket],
        connection: [TLSSocket],
        _header:
         'GET /api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nUser-Agent: axios/0.19.0\r\nHost: testnet-dex.binance.org\r\nConnection: close\r\n\r\n',
        _onPendingData: [Function: noopPendingOutput],
        agent: [Agent],
        socketPath: undefined,
        timeout: undefined,
        method: 'GET',
        path:
         '/api/v1/account/tbnb1vme7c3kq4njqdmcr4dchd0xvy72wj0aqkjzhfs',
        _ended: true,
        res: [IncomingMessage],
        aborted: false,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        _redirectable: [Writable],
        [Symbol(isCorked)]: false,
        [Symbol(outHeadersKey)]: [Object] },
     data: '' },
  isAxiosError: true,
  toJSON: [Function] } undefined
{
  "addr": null
}

client should be split into two pieces

Right now client has methods that rely on this.privateKey and others that take parameters in arguments (such as checkAddress(address)). These separate concerns should be separated out into two classes.

Npm i fails: [email protected] from the ledjer dep does not compiles under ubuntu

I made

git clone https://github.com/binance-chain/javascript-sdk
cd javascript-sdk
npm i

Installation fails with (last lines):

node-pre-gyp WARN Using request for node-pre-gyp https download 
node-pre-gyp WARN Tried to download(404): https://github.com/tessel/node-usb/releases/download/1.5.0/usb_bindings-v1.5.0-node-v67-linux-x64.tar.gz 
node-pre-gyp WARN Pre-built binaries not found for [email protected] and [email protected] (node-v67 ABI, glibc) (falling back to source compile with node-gyp) 
make: Entering directory '/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/build'
  CC(target) Release/obj.target/libusb/libusb/libusb/core.o
  CC(target) Release/obj.target/libusb/libusb/libusb/descriptor.o
  CC(target) Release/obj.target/libusb/libusb/libusb/hotplug.o
  CC(target) Release/obj.target/libusb/libusb/libusb/io.o
  CC(target) Release/obj.target/libusb/libusb/libusb/strerror.o
  CC(target) Release/obj.target/libusb/libusb/libusb/sync.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/poll_posix.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/threads_posix.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/linux_usbfs.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/linux_udev.o
../libusb/libusb/os/linux_udev.c:40:10: fatal error: libudev.h: No such file or directory
 #include <libudev.h>
          ^~~~~~~~~~~
compilation terminated.
libusb.target.mk:140: recipe for target 'Release/obj.target/libusb/libusb/libusb/os/linux_udev.o' failed
make: *** [Release/obj.target/libusb/libusb/libusb/os/linux_udev.o] Error 1
make: Leaving directory '/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/wave/.nvm/versions/node/v11.4.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:189:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:254:12)
gyp ERR! System Linux 4.15.0-45-generic
gyp ERR! command "/home/wave/.nvm/versions/node/v11.4.0/bin/node" "/home/wave/.nvm/versions/node/v11.4.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/src/binding/usb_bindings.node" "--module_name=usb_bindings" "--module_path=/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/src/binding" "--napi_version=3" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v67"
gyp ERR! cwd /home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb
gyp ERR! node -v v11.4.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
node-pre-gyp ERR! build error 
node-pre-gyp ERR! stack Error: Failed to execute '/home/wave/.nvm/versions/node/v11.4.0/bin/node /home/wave/.nvm/versions/node/v11.4.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/src/binding/usb_bindings.node --module_name=usb_bindings --module_path=/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/src/binding --napi_version=3 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v67' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:189:13)
node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:978:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:265:5)
node-pre-gyp ERR! System Linux 4.15.0-45-generic
node-pre-gyp ERR! command "/home/wave/.nvm/versions/node/v11.4.0/bin/node" "/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb
node-pre-gyp ERR! node -v v11.4.0
node-pre-gyp ERR! node-pre-gyp -v v0.11.0
node-pre-gyp ERR! not ok 
Failed to execute '/home/wave/.nvm/versions/node/v11.4.0/bin/node /home/wave/.nvm/versions/node/v11.4.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/src/binding/usb_bindings.node --module_name=usb_bindings --module_path=/home/wave/projects/current/atomic/etc/bnb-issues-2/javascript-sdk/node_modules/usb/src/binding --napi_version=3 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v67' (1)
npm WARN @binance-chain/[email protected] No repository field.
npm WARN @binance-chain/[email protected] No license field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/wave/.npm/_logs/2019-02-18T06_50_02_055Z-debug.log``

Seems that @ledgerhq/hw-transport-node-hid from package.json has node-usb dep that does not have prebuild libraries for linux. The issue in node-usb is open https://github.com/tessel/node-usb/issues/78

My uname -a:

uname -a 
Linux wave-TM1604 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

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.