Giter VIP home page Giter VIP logo

gotron-sdk's Introduction

TRON's go-sdk

GoSDK and TRON-CLI tool for TRON's blockchain via GRPC

Build

$ git pull -r origin master
$ make

cross build for windows

make windows

Usage & Examples

bash completions

once built, add tronctl to your path and add to your .bashrc

. <(tronctl completion)

Transfer JSON file format

The JSON file will be a JSON array where each element has the following attributes:

Key Value-type Value-description
from string [Required] Sender's one address, must have key in keystore.
to string [Required] The receivers one address.
amount string [Required] The amount to send in $ONE.
passphrase-file string [Optional] The file path to file containing the passphrase in plain text. If none is provided, check for passphrase string.
passphrase-string string [Optional] The passphrase as a string in plain text. If none is provided, passphrase is ''.
stop-on-error boolean [Optional] If true, stop sending transactions if an error occurred, default is false.

Example of JSON file:

[
  {
    "from": "TUEZSdKsoDHQMeZwihtdoBiN46zxhGWYdH",
    "to": "TKSXDA8HfE9E1y39RczVQ1ZascUEtaSToF",
    "amount": "1",
    "passphrase-string": "",
    "stop-on-error": true
  },
  {
    "from": "TUEZSdKsoDHQMeZwihtdoBiN46zxhGWYdH",
    "to": "TEvHMZWyfjCAdDJEKYxYVL8rRpigddLC1R",
    "amount": "1",
    "passphrase-file": "./pw.txt",
  }
]

Debugging

The gotron-sdk code respects GOTRON_SDK_DEBUG as debugging based environment variables.

GOTRON_SDK_DEBUG=true ./tronctl

GRPC TLS

If you node require TLS connection, use parameter --withTLS TLS credentials can also be set persistent in config file: withTLS: true

Trongrid API Key

To set trongrid API Key first create you api key at www.trongrid.io and use parameter --apiKey=25f66928-0b70-48cd-9ac6-da6f8247c663 (replace with your API key) Trongrid API Key can also be set persistent in config file: apiKey: 25f66928-0b70-48cd-9ac6-da6f8247c663 (replace with your API key)

OS environment variable TRONGRID_APIKEY will overwrite any prior API key configuration if set.

gotron-sdk's People

Contributors

belovbelov avatar ciricc avatar fbsobreira avatar fsiggor avatar gavlnxu avatar gribanoid avatar gustavocbritto avatar kbgod avatar michael2008s avatar sasaxie avatar sibelly avatar stanche avatar syr2bill avatar tiagolpires avatar wonderzack avatar xana-rahmani avatar xcube-io avatar zeropool 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

gotron-sdk's Issues

undefined: secp256k1.RecoverPubkey

/go/pkg/mod/github.com/fbsobreira/[email protected]/pkg/keystore/recover.go:17:33: undefined: secp256k1.RecoverPubkey

FROM golang:alpine as builder
#FROM golang:1.20 AS builder

#由于是使用了私有的gitlab的代码包,因此在编译时需要用到 git 命令拉代码
RUN apk update && apk add --no-cache git
#RUN apt-get update && apt-get install -y git

WORKDIR /work

ADD . /work

#由于 go module 中使用了私有gitlab的代码包,因此需要拉代码,需要密码
RUN cp ./config/.netrc ~/.netrc && chmod 0600 ~/.netrc

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main cmd/main.go

FROM amd64/alpine:latest
#FROM debian:stable-slim

WORKDIR /work

COPY --from=builder /work/main /work

CMD ["./main", "-path=./config"]

GRPC method GetBlockByNum2 receiving 0 transactions from block

Hello. I have strange problem. I try to save Tron blockchain to my database for future work, but when I using GRPC method GetBlockByNum2 his receiving me 0 transactions, but when I using GetNowBlock2 - that's work great.
What it's can be? Maybe I need use some timeout between calling method GetBlockByNum2 or something wrong with Tron node configuration?

Method params in TriggerContractract

Hi! Do you have the ability to use an array of addresses for smart contract method parameters? I see that the abi.Param is map[string]interface, but for example, for the send(address[], address) method, you need to use an array of maps and arrays in GetPaddedParam(param []Param), var param []abi.Param = [ { [{"address": "a3"}], [{"address": "a3"}] }, {"address": "a3"} ].

undefined: secp256k1.RecoverPubkey

Compile the Linux environment running file on Apple Mac computer error:
pkg/keystore/account.go:184:33: undefined: secp256k1.RecoverPubkey
git clone https://github.com/fbsobreira/gotron-sdk.git
GO111MODULE=on CGO_ENABLED=0 GOOS=linux go build -o g-linux cmd/main.go
version:v2.3.0
telegram-cloud-photo-size-5-6161183517745198571-y
How to solve it?

tronAddress validator mulfunction

the common.DecodeCheck function returned VALID for some INVALID addressses


import (
	"fmt"

	"github.com/fbsobreira/gotron-sdk/pkg/common"
)

func main() {
	address := "TronEnergyiorWtUSYw7vaT8ZBkAKuYFSg"

	//all addresses listed below are invalid but past the checksum
	//TronEnergyioE1Z3ukeRv38sYkv5Jn55bL
	//TronEnergyioNijNo8g3LF2ABKUAae6D2Z
	//TronEnergyio3ZMcXA5hSjrTxaioKGgqyr
	_, err := common.DecodeCheck(address)
	if err != nil {
		panic(err)
	}
	fmt.Println("Address decoded successfully")
}

proto unmashal

image

when I try to UnmarshalTo *any.Any type to TriggerSmartContract, the error appear。 TriggerSmartContract not implement ProtoReflect() Message. I use the version google.golang.org/protobuf v1.28.1
what's should id do? build the sdk by myself or just lower down the version? or any other idea!?

github.com/btcsuite/btcd/v2 need update

The latest version of go ethereum (v1.10.21) uses github. com/btcsuite/btcd/btcec/v2.2.0
Now gotron-sdk is using github. com/btcsuite/btcd v0.22.0 beta
There will be a conflict between the two.

Note that it is necessary to set the prohibition cgo, which is CGO_ ENABLED=0 Compile
Because two libraries (go-ethereum and gotron-sdk) use different btcd libraries with secp256k1.

import (
	"crypto/sha256"
	"github.com/ethereum/go-ethereum/crypto"
	"github.com/fbsobreira/gotron-sdk/pkg/keys"
	"github.com/fbsobreira/gotron-sdk/pkg/proto/core"
	"github.com/golang/protobuf/proto"
	"github.com/pkg/errors"
)

func SignTrxTx(keyword string, txData []byte) ([]byte, string, error) {
	tx, err := Bytes2TrxTx(txData)
	if err != nil {
		return nil, "", err
	}
	rawData, err := proto.Marshal(tx.GetRawData())
	if err != nil {
		return nil, "", err
	}
	priv, _ := keys.FromMnemonicSeedAndPassphrase(keyword, "", 0)

	h256h := sha256.New()
	h256h.Write(rawData)
	hash := h256h.Sum(nil)

	signature, err := crypto.Sign(hash, priv.ToECDSA())    // err: private key curve is not secp256k1
	if err != nil {
		return nil, "", err
	}

	tx.Signature = append(tx.Signature, signature)

	txData, err = TrxTx2Bytes(tx)
	if err != nil {
		return nil, "", err
	}
	hashStr := TrxHashFromBytes(hash).String()
	return txData, hashStr, nil
}

simple

func TestSign(t *testing.T) {
	txHash := []byte{
		0x9f, 0x64, 0xa7, 0x47, 0xe1, 0xb9, 0x7f, 0x13, 0x1f, 0xab, 0xb6, 0xb4, 0x47, 0x29, 0x6c, 0x9b,
		0x6f, 0x02, 0x01, 0xe7, 0x9f, 0xb3, 0xc5, 0x35, 0x6e, 0x6c, 0x77, 0xe8, 0x9b, 0x6a, 0x80, 0x6a,
	}
	keyword := "elite ripple pill dose rate hedgehog charge mercy tobacco train return bean"
	priv, _ := keys.FromMnemonicSeedAndPassphrase(keyword, "", 0)
	signature, err := crypto.Sign(txHash, priv.ToECDSA()) // err: private key curve is not secp256k1
	require.NoError(t, err)
	require.NotEmpty(t, signature)
	//var tx *core.Transaction
	//tx.Signature = append(tx.Signature, signature)
}

mnemonic and address not sync?

I use code
acc := account.Creation{
Name: "name1",
Passphrase: "",
}

if err := account.CreateNewLocalAccount(&acc); err != nil {
	return "", "", err
}
addr, _ := store.AddressFromAccountName(acc.Name)

get acc.Mnemonic and addr,but when I inport mnemonic into tp,it show address different?does it have some wrong?

Signed text verification

How can I verify a message signed by the Tronlink extension?

Basically I need to verify messages signed by frontend users using Tronlink.
I give them a message "random_message" and the frontend calls back with the signature hash. I then need to verify that hash with the message and the address.

I tried adapting the go-ethereum functions to do it but I just have no idea how the Tronlink signatures differ from Ethereum's.

DelegateResource function return txId not is real hash

func TestDelegate(t *testing.T) {
t.Skip() // Only in testnet nile
tx, err := conn.DelegateResource(testnetNileAddressExample, testnetNileAddressDelegateExample, core.ResourceCode_BANDWIDTH, 1000000, false)

require.Nil(t, err)
require.NotNil(t, tx.GetTxid())

}
tx.GetTxid() doesn't match what's queried in the block browser

How do I get the real transaction hash

please add the func (g *GrpcClient) TRC20TransferFrom

I use the sdk very happy.
While when I used the TRC20Approve and finish my job. I cannot find the TRC20TransferFrom. and I don't know how to use it without your sdk.
So. please implement the TRC20TransferFrom.
Thank you.

How to sign the tx with private key?

As far as I know, I find there are no methods to sign the tx with the private key, only keystore allowed. Could you show me how to use the private key to make a transaction?

Can't build on docker

I can run and build normally but failed to build with docker

Error message when build:

#10 8.513 # github.com/fbsobreira/gotron-sdk/pkg/keystore
#10 8.513 /go/pkg/mod/github.com/fbsobreira/[email protected]/pkg/keystore/account.go:184:33: undefined: secp256k1.RecoverPubkey

Dockerfile:

FROM golang:1.19-alpine AS builder

WORKDIR /build

COPY go.mod go.sum ./
RUN go mod download

COPY . .

ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64
RUN go build -ldflags="-s -w" -o api .

FROM golang:1.19-alpine AS production

COPY --from=builder /build/api .

# Command to run when starting the container.
ENTRYPOINT ["./api"]

Code:

package main

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"math/big"

	"github.com/btcsuite/btcd/btcec"
	"github.com/ethereum/go-ethereum/crypto"
	"github.com/fbsobreira/gotron-sdk/pkg/client"
	"google.golang.org/grpc"
	"google.golang.org/protobuf/proto"
)

func main() {
	fromAddress := "<fromAddress>"
	toAddress := "<toAddress>"
	privateKeyBytes, _ := hex.DecodeString("<pk>")

	c := client.NewGrpcClient("grpc.nile.trongrid.io:50051")
	c.Start(grpc.WithInsecure())
	amount := big.NewInt(10 * 1000000)
	tx, err := c.TRC20Send(fromAddress, toAddress, "TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf", amount, 0.1*1000000)
	if err != nil {
		panic(err)
	}
	fmt.Println(tx)
	rawData, err := proto.Marshal(tx.Transaction.GetRawData())
	if err != nil {
		panic(err)
	}

	h256h := sha256.New()
	_, err = h256h.Write(rawData)
	if err != nil {
		panic(err)
	}

	hash := h256h.Sum(nil)
	// btcec.PrivKeyFromBytes only returns a secret key and public key
	sk, pub := btcec.PrivKeyFromBytes(btcec.S256(), privateKeyBytes)

	fmt.Println(pub)
	signature, err := crypto.Sign(hash, sk.ToECDSA())
	if err != nil {
		panic(err)
	}

	tx.Transaction.Signature = append(tx.Transaction.Signature, signature)
	result, err := c.Broadcast(tx.Transaction)
	if err != nil {
		panic(err)
	}

	fmt.Println(result)
}

Steps to reproduce:

  1. go mod init ....
  2. go mod tidy
  3. docker run --rm -it $(docker build -q .)

Passing tuple to trigger contract

Hello Team, I am trying to trigger a contract function with function signature as

   struct ValsetArgs {
        address[] validators;
        uint64[] powers;
        uint256 valsetNonce;
    }
    
      function iAck(
          ValsetArgs calldata _currentValset,
          string memory relayerRouterAddress
      ) external  {
      }
  }
	var vals []string
	vals = append(vals, "TD5Ua6nEVjNDDt1CkrxPpyKxBv7TDKNLsk")
	vals = append(vals, "TD5Ua6nEVjNDDt1CkrxPpyKxBv7TDKNLsk")
	var pows []uint64
	pows = append(pows, 12)
	pows = append(pows, 12)
	val := ValsetArgs{
		Validators:  vals,
		Powers:      pows,
		ValsetNonce: "123",
	}
	valBytes, err := json.Marshal(val)
	if err != nil {
		fmt.Println("Error serializing ValsetArgs:", err)
		return
	}
	arg := fmt.Sprintf(`[{"tuple": %s}, {"string": "relayerRouterAddress"}]`, string(valBytes))
	txa, errr := client.TriggerContract("TD5Ua6nEVjNDDt1CkrxPpyKxBv7TDKNLsk", "TBKAXf2FfHTVj6PgGXerWAFk1w4tgDu22t", "iAck(tuple,string)", arg, 300000000, 0, "", 0)
	if errr != nil {
		fmt.Println("Error:", errr)
		return
	}
	fmt.Println(txa)

But getting , tried different formatting as well, didn't find any solution

abi: cannot use map as type struct as argument
Error: abi: cannot use map as type struct as argument

请问有没有创建交易的demo

请问有没有创建交易和签名的demo,我创建交易后在网站decode的地址是个16进制字符串,广播交易提示sigerror

core.TriggerSmartContract as the type proto.Message Type does not implement 'proto.Message' as some methods are missing: ProtoReflect() Message

transferParamer := &core.TriggerSmartContract{} err := d.GetParameter().UnmarshalTo(transferParamer)
The code is used to decode protobuf data but get the error:
Cannot use 'transferParamer' (type *TriggerSmartContract) as the type proto.Message Type does not implement 'proto.Message' as some methods are missing: ProtoReflect() Message

How to fixed it. Many thanks.

How to resolve the address permission operations

Hello, Fernando
How to parse the address permission operations?

GetAccount(ctx context.Context, in *core.Account, opts ...grpc.CallOption) (*core.Account, error)

This method return *core.Account field ActivePermission is []*Permission .
How to parse the Operations of each element inside.
Operations []byte protobuf:"bytes,6,opt,name=operations,proto3" json:"operations,omitempty"

Look forward to your reply, Thank you.

go.mod error

go: errors parsing go.mod:
/Users/zh46053ml/workspace/international_station/wallet/common/go.mod:9:2: require github.com/fbsobreira/gotron-sdk: version "v2.2.2" invalid: should be v0 or v1, not v2
Hi, all, starting with major version 2, module paths must have a major version suffix like /v2 that matches the major version. For example, if a module has the path example.com/mod at v1.0.0, it must have the path example.com/mod/v2 at version v2.0.0. so, Is this problem caused by a non-versioning rule?

Is is possible to build gotron on MacOS?

Hi,

I've just cloned the code, and run make. it said:

➜  gotron-sdk git:(master) ✗ make
GO111MODULE=on go build -o ./bin/tronctl -ldflags="-X main.version=v234 -X main.commit=4c6c1768 -X main.builtAt=2021-01-29T15:08:52+0900 -X [email protected]" cmd/main.go
# github.com/rjeczalik/notify
vendor/github.com/rjeczalik/notify/watcher_fsevents.go:49:11: undefined: stream
vendor/github.com/rjeczalik/notify/watcher_fsevents.go:200:13: undefined: newStream
make: *** [all] Error 2

The OS version is macOS Big Sur, version 11.0.1 (20B29)

Could any one help me?

parse the transfer method code of trc20

I am trying to parse the transfer method code of trc20 as follows

package parser
// Defines a set of constants related to the length of the original data
const (
	methodIDLength = 8 // method length
	addressLength = 64 // address length
	valueLength = 64 // Amount length
	valueLength2 = 62 // Amount length Another unexpected value length

	valueStartIndex = methodIDLength + addressLength // method + address value start position && Length without value (zero trc20 rotated)
	trc20Length = methodIDLength + addressLength + valueLength // full length
)
func unpackTransfer(data string) (to string, value int64, err error) {
	// less than full length (method + address length + amount) && Not equal to method + address length && Not equal to method + address length + special amount length (full length -2)
	if len(data) < trc20Length && len(data) ! = valueStartIndex && len(data) ! = valueStartIndex+valueLength2 {
		return "", 0, fmt.Errorf(" length error [%d]", len(data))
	}

	to = data[valueStartIndex-42 : valueStartIndex]
	to = "41" + to[2:] // Must start with 41
	var address []byte
	if address, err = common.Hex2Bytes(to); err ! = nil {
		return "", 0, errors.Wrapf(err, "resolve address Hex error [%s]", to)
	}
	to = common.EncodeCheck(address)

	var money string // Amount
	if len(data) > valueStartIndex {// Whether there is a section for the amount
		money = data[valueStartIndex:] // Get the amount part
		money = strings.TrimLeft(money, "0")
	}
	if money == `` {
		return to, 0, nil
	}
	if value, err = strconv.ParseInt(money, 16, 64); err ! = nil {
		return "", 0, errors.Wrapf(err, "resolve amount [%s]", money)
	}

	return to, value, nil
}

But that doesn't handle all the cases and there are some very special data that you encounter

For example:
    Super long:
        On-chain hash: ef4cbd02202dd5c6647600a2de4df70951d9c9d9ae391c93d64ce9eec14094d3
        data: a9059cbb000000000000000000000000f743a0de74a3781f5f0492de3fd3b1410a2352140000000000000000000000000000000000000000000000000000000000989680000000000000000000000000f340ca9421c992cd5927a7bc61c18f0384d52d5c
        Actually means:  TY9QpTGunZ1KCa83uzpz3GXoLTRPn9GRqu 10 TYWcvLvbFxySX8HAnxXjhVte5oiBx81ie5
    
    Short amount:
        On-chain hash: c094559701ec72c168f4f3fc4615dfeb44f078b445332f8eb223696cc7fa5f65
        data: a9059cbb00000000000000000000000091849405042da41ce8123de29d2a1ec8e7147100000000000000000000000000000000000000000000000000000000000000c6
        Actually means: TLR6Fo8BguoNeeRG3UvRGWFYycXyPFip4J 0.050688 to TPEdoZyXmE4RjgmRMKjyvu3f54JWnGT1Rw
    
    Super short:
        On-chain hash: cd5999e514c08b65a1fd12dd6576c1732d6d2ffc88c7bc866b2544057b494966
        data: a9059cbb417fe82960569987688abf7e9d1ae62a597a44d03b
        Actually means: TMdWwJ1RycC14N3c9UvyR9mefVuj3Ypsdc 0 to TQHuKA61BvkTSnyq6f23KHeAHTD2hXwBx2

Is there an integrated parsing method to call?

how to multsign

permissionId
image

I didn't see how to sign more signatures and get in touch with you further?

About the param of Trigercontract function

Hello,there!I've been tortured by the trigercontract function these days cause I got stucked when generating the type of "address[]" and "uint256[]" params to json string.Hope u guys can save child from the hell o((⊙﹏⊙))o.

`
c, err := grpcs.NewClient(node)
if err != nil {
panic(err)
}
param0:=map[string]interface{}{"address":"TF17BgPaZYbz8oxbjhriubPDsA7ArKoLX3"}
param1:=map[string]interface{}{"uint256[]":[]interface{}{"1000000000000000000","3000000000000000000"}}
param2:=map[string]interface{}{"address[]":[]interface{}{"TXmJUu9LRxfuMdWfq1yvfgrcjktWMmBagT","TRc1toWf5B6sELSM3pycFZkewiYPafmbao"}}
data:=[]map[string]interface{}{param0,param2,param1}
data1,_:=json.Marshal(data)
stringData:=string(data1)
fmt.Println(stringData)

tx,err:=c.GRPC.TriggerContract("TYAssDXyb8yf5DrxBH9kgkfmU4jZ81SisQ","TP2N1dERMjH1TpfvG2iEJphGFj7xUFB3HD","sendToken(address,address[],uint256[])",stringData,300000000, 0, "", 0)
signTx, err :=
sign.SignTransaction(tx.Transaction,"oe9e798a06c89f3abc74dc416feef18cc8b00303ace9b7539a8115b65a1abdcf")
if err != nil {
panic(err)
}
err = c.BroadcastTransaction(signTx)
if err != nil {
panic(err)
}
txid:=strings.TrimLeft(common.BytesToHexString(tx.GetTxid()),"0x")
t.JSON(http.StatusOK, gin.H{"Code":1,"result":txid})
`

The error show that "can not take []interface as []string".Should I change the key "address[]" to "address"?which seems to beconflicted with the requirement of tron contract interaction,what should i do to rectify the code?

Your reply will be highly appreciated!tks alot! ヾ(•ω•`)o

keystore watcher not release

I init in a injector method ensure grpc client init one time,such as:
`func InitTronGRpc() (*client.GrpcClient, func(), error) {
cfg := config.C.TronGrid
opts := make([]grpc.DialOption, 0)
opts = append(opts, grpc.WithInsecure())

conn := client.NewGrpcClient(cfg.RPCHost)

if err := conn.Start(opts...); err != nil {
	_ = fmt.Errorf("Error connecting GRPC Client: %v \n", err)
}
cleanFunc := func() {
	conn.Stop()
}
err := conn.SetAPIKey(cfg.ApiGrpcKey)
if err != nil {
	logger.Errorf(context.Background(), "init GRPC Client error %v ", err)
	_ = fmt.Errorf("ini GRPC Client err: %v \n", err)
	return nil, cleanFunc, err
}
_, err = account.ImportFromPrivateKey(
	cfg.OperatorPrivateKey,
	cfg.OperatorName,
	cfg.OperatorPassword)
if err != nil {
	logger.Errorf(context.Background(), "import private key error %v ", err)
	_ = fmt.Errorf("import private key err: %v \n", err)
}
return conn, cleanFunc, nil

}
`

and I call UnlockedKeystore in a service ,
I found UnlockedKeystore not release watcher goroutine, cause memory is full

func (tron *TronOperator) SignatureExecuteTx(ctx context.Context, tx *api.TransactionExtention, err error) (string, error) { ks, acct, _ := store.UnlockedKeystore(config.C.TronGrid.OperatorAddress, config.C.TronGrid.OperatorPassword) ctrlr := transaction.NewController(tron.TronGrpc, ks, acct, tx.Transaction) if err = ctrlr.ExecuteTransaction(); err != nil { return "", err } txId := utils.BytesToNo0xHexString(tx.GetTxid()) return txId, err }

all goroutine keep in memory, like this

1670922794829

How to solve ?
Thanks!

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.