Giter Site home page Giter Site logo

btp's People

Contributors

andrii-kl avatar dependabot[bot] avatar inwonkim avatar jspark-icon avatar kornery avatar kwon528 avatar sink772 avatar twixcandy avatar yakkle 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

Watchers

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

btp's Issues

Burn Protocol Fee on Java xCall and add getTotalIcxBurned API

@sink772 for the Java xCall service, protocol fee can be burned because it is ICX on the ICON Blockchain. Please update the logic when you get the chance.

Also, I think it would be nice to create getTotalIcxBurned API, which increases every time the Protocol Fee is burned. It will make it easy for statistics dashboards to track ICX burned over time.

One BMR maliciously ignore BTP Message can cause all BMR other BMRs to stop

In the current implementation of BMR, BTP Messages are expected to always be the latest block. However, if one BMR decides to ignore a BTPMessage. The next BTP Message sent by any BMRs will receive E0032:BMVRevertInvalidSequenceHigher

Ref to ICON Foundation implementation https://github.com/icon-project/btp/blob/master/cmd/btpsimple/chain/chain.go#L212-L223
Ref to ICONDAO implementation https://github.com/icon-project/btp/blob/refactor-layout/btp/btp.go#L307-L322

golang net error of EOF when monitor PRA chain

During testing on testnets

I got these errors, which stops BMR

D|04:27:18.680143|1e9E|-|btp|btp.go:290 addRelayMessage bu.Height:3455490 b.bmcLinkStatus.Verifier.Height:3454226
D|04:27:18.680170|1e9E|-|btp|btp.go:327 addRelayMessage rms:3 bu:3455020 ~ 3455490
D|04:27:19.012345|1e9E|-|btp|btp.go:235 canRelay rms:3 has_wait:true skippable:false relayable:false
D|04:27:20.663190|1e9E|-|btp|btp.go:290 addRelayMessage bu.Height:3455491 b.bmcLinkStatus.Verifier.Height:3454226
D|04:27:20.663217|1e9E|-|btp|btp.go:327 addRelayMessage rms:3 bu:3455020 ~ 3455491
D|04:27:22.674657|1e9E|-|btp|btp.go:290 addRelayMessage bu.Height:3455492 b.bmcLinkStatus.Verifier.Height:3454226
Error: MonitorLoop parachain, got err: Post "https://rpc.testnet.moonbeam.network": EOF
MonitorLoop parachain, got err: Post "https://rpc.testnet.moonbeam.network": EOF
D|04:27:46.545850|2dbd|-|btp|btp.go:188 OnBlockOfDst height:3455504
D|04:27:48.504400|2dbd|-|btp|btp.go:188 OnBlockOfDst height:3455505
Error: ReceiveLoop parachain, got err
ReceiveLoop parachain, got err
github.com/icon-project/btp/common/errors.Wrap
	/home/ubuntu/work/btp/common/errors/errors.go:193
github.com/icon-project/btp/chain/pra.(*Receiver).ReceiveLoop
	/home/ubuntu/work/btp/chain/pra/receiver.go:214
github.com/icon-project/btp/btp.(*BTP).Serve.func2
	/home/ubuntu/work/btp/btp/btp.go:150
runtime.goexit
	/snap/go/8298/src/runtime/asm_amd64.s:1371
Wrapping Post "https://rpc.testnet.moonbeam.network": EOF

BMC Relay Sender & Receiver

  • Round trip ICON -> Sender testing
  • Use MockBMR with Sha3 FIPS pre-compiles
  • Properly import Ethereum Wallet
  • Externalise default configurations retries, timeout, etc..

BSC RPC Client Implementation

  • Incorporated go-ethereum client (Binance Smart Chain)
  • Implementation of key methods: SendTransaction, SendSignedTransaction, GetBlockHeader

Test

Does this populate in GitHub

Add Code Coverage Reporting with Codecov

To get the idea of test coverage of the repo, add github actions pipeline with following actions:

  1. Show coverage of the main branch iconloop-v2 on README file
  2. Add coverage reporting on PR and merge to the main branch iconloop-v2 in comments section

Acala integration impidiment

Problem 1

To integrate BTP, a set of Relaychain and Parachain should provide the following JSON-RPC APIs:

  • eth_call
  • eth_chainId
  • eth_estimateGas
  • eth_gasPrice
  • eth_getCode
  • eth_getTransactionCount
  • eth_getTransactionReceipt
  • eth_sendRawTransaction
  • chain_getBlock
  • chain_getBlockHash
  • grandpa_proveFinality
  • state_getMetadata
  • state_getReadProof
  • state_getStorageAt

APIs in bolded text are missing in implementation of Acala network on Acala/Karura environment. They only have 2 JSON RPC methods to interact with EVM, which are evm_call and evm_estimateGas, and they can logically replace eth_call and eth_estimateGas, respectively. However, for BTP integration, these 2 JSON RPC methods are not enough. This is because Acala has their own implementation called Bodhi, instead of using Frontier implementation unlike Moonbeam. Compared to Frontier, Bodhi does not support standard Ethereum RPC and is not Web3 compatible.

You can check Karura (Acala network's Parachain on Kusama)'s API list by choosing 'rpc' in 'call the selected endpoint' dropdown and clicking 'Submit RPC call' in https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fkarura-rpc-0.aca-api.network#/rpc

Problem 2

The second problem is that since Acala's implementation doesn't support evm.log event as a system event unlike Frontier, there is no way to prove the EVM event log contains BTP Message(s). As a result, the current BMV proof won’t work.

Problem 3

Also note that Acala isn't compatible with Truffle which we have used for development since day 1 according to Compatible Toolings. To run all existing tests on Acala environment, it's required to change the development environment from Truffle to Waffle and rewrite all tests. Technically, this is a time consuming task rather than a blocker.

Solution

Here are solutions sorted from easiest to hardest:

  1. Ask Acala team to support evm.Log event in EVM Pallet/Frame (The second problem) and missing APIs for BMR (The first problem)
  2. Rewrite BMC, BMV, BSH in !ink to natively support Relay chain and Parachain so that it can support Parachains supporting !ink whether they use Frontier or not. Note that not every Parachain supports !ink e.g. Moonbeam.
  3. As a runtime level solution, we could write a btp Pallet/FRAME module containing BMC, BMV, BSH aiming to every Parachain. In this case, Parachains don't even need to provide precompiles like sha3-256.

cc @trmaphi

BSH Java SCORE

  • Confirm BEP20 and ERC20 are compatible
  • Deploy BEP20 Token to BSC local chain
  • Implementation of BSH
  • Implementation of Token Transfer Service
  • Complete test scenarios
  • Add FA Aggregation contract

Solidity BSC BMV

  • Implement Solidity BTP Message Verifier
  • Implement Solidity MPT and MTA
  • LRP Solidity encoder / decoder (leverage ICONDAO implementation)
  • LRP Solidity BSC <> ICON roundtrip testing.
  • Integrate with BMR.

PythonSCORE BMC can't be deployed on goloop version v0.9.6

The current build on icon branch is exactly the same with master. However, I can't deploy them with docker image iconloop/goloop-icon:v0.9.6.

I did try again on sejong testnet, but it didn't work.

# Estimate step limit failed
goloop rpc --debug --uri https://sejong.net.solidwallet.io/api/v3 \
    sendtx deploy build/pyscore/bmc.zip \
    --key_store .keystore/sejong.json \
    --key_password sejong \
    --nid 0x53 \
    --step_limit 13610920001 \
    --content_type application/zip\
     --param _net="0x53.icon" --estimate

Error: jsonrpc: code: -30005, message: E0005:IllegalFormat, data: E0005:IllegalFormat
github.com/icon-project/goloop/common/errors.Errorc
	/work/common/errors/errors.go:177
github.com/icon-project/goloop/common/errors.Code.New
	/work/common/errors/errors.go:66
github.com/icon-project/goloop/service/eeproxy.(*proxy).HandleMessage
	/work/service/eeproxy/proxy.go:472
github.com/icon-project/goloop/common/ipc.(*connection).HandleMessage
	/work/common/ipc/connection.go:127
github.com/icon-project/goloop/common/ipc.(*server).handleConnection
	/work/common/ipc/server.go:79
runtime.goexit
	/usr/local/go/src/runtime/asm_amd64.s:1373

# Execute real transaction on testnet
goloop rpc --debug --uri https://sejong.net.solidwallet.io/api/v3 \
    sendtx deploy build/pyscore/bmc.zip \
    --key_store .keystore/sejong.json \
    --key_password sejong \
    --nid 0x53 \
    --step_limit 13610920001 \
    --content_type application/zip\
     --param _net="0x53.icon"

# Result
# "0xc5d81d1b0a6abf82f5c2148d8d37c8715763fd5665eaabb4d2a3257f2a4b9352"
# https://sejong.tracker.solidwallet.io/transaction/0xc5d81d1b0a6abf82f5c2148d8d37c8715763fd5665eaabb4d2a3257f2a4b9352

cc @canhlinh @flowersinthesand

Error during deploying which causes Moonbeam exited

An error during deploying, it makes g2m_btp_moonbeam stops. But they were working fine when I restarted all containers after that.

Deployment guide used: https://github.com/icon-project/btp/tree/icondao/docker-compose/goloop2moonbeam

g2m_btp_moonbeam | D|04:12:54.536999|b6b5|-|btp|btp.go:235 canRelay rms:2 has_wait:true skippable:true relayable:false
g2m_btp_moonbeam | P|04:12:56.915627|b6b5|-|btp|btp.go:447 fail to GetResult GetResultParam:&{0x58f5a99b7fb079ac16c36c68c04d4ac0091d1566ad4021d05832e7699829c7c7} err:fail to getresult by pending
g2m_btp_moonbeam | panic: (*logrus.Entry) 0xc0001a5dc0
g2m_btp_moonbeam |
g2m_btp_moonbeam | goroutine 158 [running]:
g2m_btp_moonbeam | github.com/sirupsen/logrus.Entry.log(0xc0001a5f80, 0xc000121140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
g2m_btp_moonbeam | 	/home/ubuntu/work/pkg/mod/github.com/sirupsen/[email protected]/entry.go:259 +0x345
g2m_btp_moonbeam | github.com/sirupsen/logrus.(*Entry).Log(0xc000196070, 0x0, 0xc004ae3e70, 0x1, 0x1)
g2m_btp_moonbeam | 	/home/ubuntu/work/pkg/mod/github.com/sirupsen/[email protected]/entry.go:287 +0xf0
g2m_btp_moonbeam | github.com/sirupsen/logrus.(*Entry).Logf(0xc000196070, 0xc000000000, 0xf9f12d, 0x2b, 0xc000aec6e0, 0x2, 0x2)
g2m_btp_moonbeam | 	/home/ubuntu/work/pkg/mod/github.com/sirupsen/[email protected]/entry.go:333 +0xe5
g2m_btp_moonbeam | github.com/sirupsen/logrus.(*Entry).Panicf(0xc000196070, 0xf9f12d, 0x2b, 0xc000aec6e0, 0x2, 0x2)
g2m_btp_moonbeam | 	/home/ubuntu/work/pkg/mod/github.com/sirupsen/[email protected]/entry.go:371 +0x65
g2m_btp_moonbeam | github.com/icon-project/btp/btp.(*BTP).updateResult.func1()
g2m_btp_moonbeam | 	/home/ubuntu/testnet/btp/btp/btp.go:447 +0x752
g2m_btp_moonbeam | github.com/gammazero/workerpool.startWorker(0xc005576930, 0xc0009e61e0)
g2m_btp_moonbeam | 	/home/ubuntu/work/pkg/mod/github.com/gammazero/[email protected]/workerpool.go:233 +0x27
g2m_btp_moonbeam | created by github.com/gammazero/workerpool.(*WorkerPool).dispatch
g2m_btp_moonbeam | 	/home/ubuntu/work/pkg/mod/github.com/gammazero/[email protected]/workerpool.go:195 +0x2f8
g2m_btp_icon    | D|04:12:57.028309|3Cd0|-|btp|btp.go:188 OnBlockOfDst height:235
g2m_btp_moonbeam exited with code 2

Getting error on bringing up moonbeam

I'm using Docker on Mac M1

I'm following the instructions here: https://icondev.io/btp-gitbook/btp-development-instructions

The final step is to bring up the moonbeam node:

docker-compose up moonbeam

This results in an error:

$ docker compose up moonbeam
[+] Building 1.0s (8/8) FINISHED                                                                           
 => [internal] load build definition from Dockerfile                                                  0.0s
 => => transferring dockerfile: 32B                                                                   0.0s
 => [internal] load .dockerignore                                                                     0.0s
 => => transferring context: 2B                                                                       0.0s
 => [internal] load metadata for docker.io/purestake/moonbeam:v0.13.2-upgrade-hotfix                  0.8s
 => [internal] load metadata for docker.io/library/debian:buster-slim                                 0.7s
 => CACHED [stage-1 1/3] FROM docker.io/purestake/moonbeam:v0.13.2-upgrade-hotfix@sha256:9718c43b402  0.0s
 => CACHED [base 1/1] FROM docker.io/library/debian:buster-slim@sha256:f6e5cbc7eaaa232ae1db675d83eab  0.0s
 => [stage-1 2/3] COPY --from=base /usr/bin /usr/bin                                                  0.0s
 => ERROR [stage-1 3/3] RUN apt-get update && apt-get install -y curl                                 0.2s
------
 > [stage-1 3/3] RUN apt-get update && apt-get install -y curl:
#8 0.148 /bin/sh: 1: apt-get: not found
------
failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c apt-get update && apt-get install -y curl]: exit code: 127

Docker based deployment fails with provision.sh error

Failed to deploy docker based testnet.

  1. Pull latest code (here)
  2. make run causes below error. It seems provision.sh doesn't work correctly. Script keeps showing this log.
g2m_btp_moonbeam | waiting for an other BTP to finish provisioning settings...
g2m_btp_icon    | 2021-10-29 09:17:42        API/INIT: RPC methods not decorated: debug_traceBlockByHash, debug_traceBlockByNumber, debug_traceTransaction
g2m_btp_icon    | 2021-10-29 09:17:42        METADATA: Unknown types found, no types for AssetRegistrarMetadata, AssetType, AuthorId, BlockV0, Collator2, CollatorSnapshot, CurrencyId, ExitQ, InflationInfo, Nominator2, NominatorAdded, OrderedSet, ParachainBondConfig, RegistrationInfo, RelayChainAccountId, RewardInfo, RoundInfo, VestingBlockNumber
g2m_btp_icon    | relay genesis hash:  0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe
g2m_btp_icon    | relay chain name:  "Kusama"
g2m_btp_icon    | para genesis hash:  0xde0ba5802ad6fc3758e5d18ba847c910ab94702359a76de94b18940de486d33a
g2m_btp_icon    | para chain name:  "Moonbase Development Testnet"
g2m_btp_icon    |  Get metadata of relay chain...
g2m_btp_moonbeam | waiting for an other BTP to finish provisioning settings...
g2m_btp_icon    |  Get metadata of para chain...
g2m_btp_moonbeam | waiting for an other BTP to finish provisioning settings...
g2m_btp_icon    | Done in 28.68s.
g2m_btp_icon    | parachain height:0x41 block_hash:0xb9ee93e624dacd599df0ac8bc19bec3da2a3ab818bc63158e6df854aae54f23c
g2m_btp_icon    | "0x9ee2c58efe222364b8a761050a90ccfef185d3f3f4d2fdf33941ed67ee8da26a"
g2m_btp_icon    | /entrypoint.sh: /btpsimple/scripts/provision.sh: line 97: --param: not found
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_moonbeam | waiting for an other BTP to finish provisioning settings...
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0
g2m_btp_moonbeam | waiting for an other BTP to finish provisioning settings...
g2m_btp_icon    | Usage: goloop rpc txresult HASH [flags]
g2m_btp_icon    | Error: accepts 1 arg(s), received 0

SHA3-256 FIPS 202 and ECDSA Recovery Uncompressed public key Precompiles for NEAR Protocol

Description

As part of BTP, The chains should implement SHA3-256 FIPS 202 and ECDSA Recovery Uncompressed public key for the smart contracts participating in the Network and NEAR protocol does not have the required implementation.

Suggestion

Add SHA3-256 FIPS 202 and ECDSA Recovery Uncompressed public key precompiles implementation to NEAR VM.

Progress

  • Implement precompile for SHA3-256 FIPS 202
  • Implement precompile for ECDSA Recovery Uncompressed public key
  • Implement interface in near-sdk
  • Testing
  • Raise PR to include to nearcore

Unit testing Instructions

Fee Aggregation Logic implementation in tokenBSH

  • Implement Fee collection Logic in ERC20 tokenBSH
  • Implement GatherFee Logic in ERC20 tokenBSH
  • Test cases for FA logic in ERC20 TokenBSH
  • Integrate BMC mock with BSH & modify test cases to test flow
  • Implement Fee collection Logic in IRC2 tokenBSH

Fails on Python SCORE when receive RelayMessage

The latest version of Python SCORE fails on receiving RelayMessage.

Command ran:

make btpsimple-image
docker-compose -f docker-compose/docker-compose.yml up --build -d
oloop_1         | I|20210526-03:52:08.720426|2cd7|d782a4|SV|transactionpool.go:214 TransactionPool.Candidate collected=1 removed=0 poolsize=1 duration=167.771µs
goloop_1         | D|20210526-03:52:08.720751|2cd7|d782a4|SV|transition.go:365 reportValidation(err=<nil>)
goloop_1         | D|20210526-03:52:08.721151|2cd7|d782a4|SV|transition.go:498 Transition.doExecute: height=48 csi=ConsensusInfo(proposer=hx2cd7ac701ef6443e9c964ad3af04043fa425cf84,voters=validatorList[[Validator[addr=hx2cd7ac701ef6443e9c964ad3af04043fa425cf84,pkey=<>]]],voted=[true])
goloop_1         | W|20210526-03:52:08.721353|2cd7|c7cb24|SV|90a4941d|log.go:205 python|cxc612c005|service_engine.py:149 [SystemError] NameError("name 'sha3_256' is not defined")
goloop_1         | Traceback (most recent call last):
goloop_1         |   File "/goloop/venv/lib/python3.7/site-packages/pyexec/service_engine.py", line 93, in _handle_invoke
goloop_1         |     ret = cls._internal_call(context)
goloop_1         |   File "/goloop/venv/lib/python3.7/site-packages/pyexec/service_engine.py", line 127, in _internal_call
goloop_1         |     return score_func(func_name=func_name, arg_params=arg_params, kw_params=kw_params)
goloop_1         |   File "/goloop/venv/lib/python3.7/site-packages/pyexec/iconscore/icon_score_base.py", line 458, in __call
goloop_1         |     ret = score_func(*arg_params, **kw_params)
goloop_1         |   File "/goloop/venv/lib/python3.7/site-packages/pyexec/iconscore/icon_score_base.py", line 275, in __wrapper
goloop_1         |     res = func(calling_obj, *args, **kwargs)
goloop_1         |   File "/goloop/data/goloop/d782a4/contract/0xafabf5a4146e396d5d365dcf98d5e1ad407d5083f68b40d231bbd7bd42de2522/bmv/icon/icon.py", line 187, in handleRelayMessage
goloop_1         |     receipt_hash, last_height = self._last_receipt_hash(relay_msg)
goloop_1         |   File "/goloop/data/goloop/d782a4/contract/0xafabf5a4146e396d5d365dcf98d5e1ad407d5083f68b40d231bbd7bd42de2522/bmv/icon/icon.py", line 106, in _last_receipt_hash
goloop_1         |     self._props.mta.add(block_update.block_header.hash)
goloop_1         |   File "/goloop/data/goloop/d782a4/contract/0xafabf5a4146e396d5d365dcf98d5e1ad407d5083f68b40d231bbd7bd42de2522/lib/icon/mta.py", line 149, in add
goloop_1         |     _hash = sha3_256(self.__roots[idx] + _hash)
goloop_1         | NameError: name 'sha3_256' is not defined
goloop_1         | D|20210526-03:52:08.721888|2cd7|c7cb24|SV|90a4941d|log.go:205 python|cx53a75dd8|service_engine.py:144 [SystemException] name 'sha3_256' is not defined
goloop_1         | I|20210526-03:52:08.722058|2cd7|c7cb24|SV|transition.go:549 Transactions:      1  Elapsed:    38.379 ms  PerTx: 38379.0 µs  TPS:     26.06

Add getTotalMessages API to BMC

I would like to add a getTotalMessages API to BMC logic of all BMCs. When a new message is created on a source chain, the source chain BMC should increase totalMessages by 1. This will make it easy for statistics dashboards to track BTP data.

BTP Standard: Other Network <> Other Network Direct Communication

We must find a scalable standard to allow non-ICON networks to communicate directly with each other. Here is one initial plan to get the discussion going:

All BTP messages from Other Networks arrive to the ICON BMC, then ICON BMC can emit events for BMR to relay message to correct destination chain. This way, each Other Network only needs one BMV, but ICON Network will have BMV of all connected networks. But from a User Experience point, it is still Other Network <> Other Network directly.

Example:

Bob’s goal -> Send 1 ACALA token from Acala network to Binance Smart Chain

1.) Bob sends 1 ACALA token to acala_BSH
2.) acala_BSH creates this btpMessage (src: ACALA, dst: BSC, svc: tokenTransfer, sn: 1, msg: Bytes)
3.) btpMessage is sent to acala_BMC
4.) BMR reads event from acala_BMC
5.) BMR sends btpMessage to icon_BMC
6.) icon_BMV verifies btpMessage data
7.) icon_BMC emits an event of verified btpMessage
8.) BMR reads event from icon_BMC
9.) BMR sends btpMessage to bsc_BMC (this is because dst = BSC)
10.) bsc_BMC sends the btpMessage to bsc_BMV
11.) bsc_BMV verifies btpMessage
12.) bsc_BMC sends message proof to bsc_BSH
13. bsc_BSH mints 1 ACALA token

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.