Giter Site home page Giter Site logo

delphereum's Introduction

What is Delphereum?

Delphereum is a Delphi interface to the Ethereum blockchain that allows for development of native dapps (aka decentralized applications) that interact with the Ethereum network, including sending transactions, working with smart contracts, and reading blockchain data.

What is Delphi?

Delphi is a development environment that compiles into native apps for Windows, macOS, iOS, and Android.

What is Ethereum?

Ethereum is a blockchain-based distributed computing platform and operating system featuring smart contracts.

What is a smart contract?

A smart contract is a computation that takes place on a blockchain or distributed ledger. You can think of a smart contract as a microservice that runs trustless on the backend of your application.

Smart contracts can have many applications, ranging from sports betting to online voting. But the true power of smart contracts is in managing assets that have value and are scarce.

Once added to the blockchain, a smart contract becomes public and cannot be modified or removed. This assures your users that the rules are transparent and will never change.

What is a dapp?

A dapp is an application whose backend runs on a decentralised network with trustless protocols. Dapps aren’t owned by anyone, cannot be shut down, and have zero downtime.

What other networks does this thing support?

Delphereum supports every EVM-compatible network, including (but not limited to)

Dependencies

Before you can compile this project, you will need to clone the following repositories, and then add them to your Delphi search path:

git clone https://github.com/rvelthuis/DelphiBigNumbers
git clone https://github.com/Xor-el/SimpleBaseLib4Pascal
git clone https://github.com/Xor-el/HashLib4Pascal
git clone https://github.com/Xor-el/CryptoLib4Pascal

Please note there are NO runtime dependencies. Delphereum is lightweight and self-contained.

Search path

Assuming your project is named MyProject and you have a projects directory with this structure...

MyProject 
CryptoLib4Pascal
delphereum
DelphiBigNumbers
HashLib4Pascal
SimpleBaseLib4Pascal

...then this is your Delphi search path:

../delphereum;../DelphiBigNumbers/Source;../CryptoLib4Pascal/CryptoLib/src/Interfaces;../CryptoLib4Pascal/CryptoLib/src/Math;../CryptoLib4Pascal/CryptoLib/src/Utils;../CryptoLib4Pascal/CryptoLib/src/Security;../HashLib4Pascal/HashLib/src/Interfaces;../HashLib4Pascal/HashLib/src/Utils;../CryptoLib4Pascal/CryptoLib/src/Utils/Randoms;../HashLib4Pascal/HashLib/src/Base;../HashLib4Pascal/HashLib/src/KDF;../HashLib4Pascal/HashLib/src/Nullable;../HashLib4Pascal/HashLib/src/NullDigest;../HashLib4Pascal/HashLib/src/Checksum;../HashLib4Pascal/HashLib/src/Hash32;../HashLib4Pascal/HashLib/src/Hash64;../HashLib4Pascal/HashLib/src/Hash128;../HashLib4Pascal/HashLib/src/Crypto;../HashLib4Pascal/HashLib/src/Interfaces/IBlake2BParams;../HashLib4Pascal/HashLib/src/Crypto/Blake2BParams;../HashLib4Pascal/HashLib/src/Interfaces/IBlake2SParams;../HashLib4Pascal/HashLib/src/Crypto/Blake2SParams;../CryptoLib4Pascal/CryptoLib/src/Crypto/Digests;../CryptoLib4Pascal/CryptoLib/src/Asn1/Pkcs;../CryptoLib4Pascal/CryptoLib/src/Asn1;../CryptoLib4Pascal/CryptoLib/src/Utils/Encoders;../SimpleBaseLib4Pascal/SimpleBaseLib/src/Bases;../SimpleBaseLib4Pascal/SimpleBaseLib/src/Utils;../SimpleBaseLib4Pascal/SimpleBaseLib/src/Interfaces;../CryptoLib4Pascal/CryptoLib/src/Asn1/RossStandart;../CryptoLib4Pascal/CryptoLib/src/Asn1/Oiw;../CryptoLib4Pascal/CryptoLib/src/Asn1/Nist;../CryptoLib4Pascal/CryptoLib/src/Asn1/Misc;../CryptoLib4Pascal/CryptoLib/src/Asn1/TeleTrust;../CryptoLib4Pascal/CryptoLib/src/Asn1/CryptoPro;../CryptoLib4Pascal/CryptoLib/src/Crypto/Prng;../CryptoLib4Pascal/CryptoLib/src/Utils/Rng;../CryptoLib4Pascal/CryptoLib/src/Crypto/Engines;../CryptoLib4Pascal/CryptoLib/src/Crypto/Parameters;../CryptoLib4Pascal/CryptoLib/src/Crypto;../CryptoLib4Pascal/CryptoLib/src/Math/EC;../CryptoLib4Pascal/CryptoLib/src/Crypto/EC;../CryptoLib4Pascal/CryptoLib/src/Math/EC/Endo;../CryptoLib4Pascal/CryptoLib/src/Asn1/Sec;../CryptoLib4Pascal/CryptoLib/src/Asn1/X9;../CryptoLib4Pascal/CryptoLib/src/Asn1/CryptLib;../CryptoLib4Pascal/CryptoLib/src/Math/Raw;../CryptoLib4Pascal/CryptoLib/src/Math/EC/Multiplier;../CryptoLib4Pascal/CryptoLib/src/Math/EC/Abc;../CryptoLib4Pascal/CryptoLib/src/Math/Field;../CryptoLib4Pascal/CryptoLib/src/Math/EC/Custom/Sec;../CryptoLib4Pascal/CryptoLib/src/Math/EC/Custom/Djb;../CryptoLib4Pascal/CryptoLib/src/Crypto/Signers;../CryptoLib4Pascal/CryptoLib/src/Crypto/Generators;../CryptoLib4Pascal/CryptoLib/src/Crypto/Macs

Tutorials

  1. Connecting Delphi to a local (in-memory) blockchain
  2. Connecting Delphi to the Ethereum main net
  3. Connecting Delphi to smart contracts
  4. Generating an Ethereum-signed message signature in Delphi
  5. Transferring ether with Delphi
  6. Transferring ERC-20 tokens with Delphi
  7. Delphi and Ethereum Name Service (ENS)
  8. A 3-minute Smart Contract and Delphi - Part 1
  9. A 3-minute Smart Contract and Delphi - Part 2
  10. QuikNode, Ethereum and Delphi
  11. Delphi and the Ethereum Dark Forest
  12. Swap one token for another in Delphi

Case studies

1. Migratooor

Migratooor transfers all your tokens from one wallet to another. You can download migratooor for Windows or macOS.

2. Bankless

Bankless is a DeFi desktop app with the highest possible yield on your stablecoin savings.

Made with Delphi, bankless is a small and simple dapp that makes it super easy to transfer your savings from one lending protocol to another with the click of one button.

You can download bankless for Windows or macOS.

3. Balancer

Balancer is an implementation of the https://balancer.finance protocol in native code, made possible by an awesome grant from the Balancer DAO. You can download balancer for Windows or macOS.

4. PubSub

PubSub is a simple "Hello World" example project, demonstrating how to subscribe to an Ethereum RPC provider and get notified every time a new block got mined. You can download PubSub for Windows.

License

Distributed under the GNU AGP v3.0 with Commons Clause license.

Sponsors

Commercial support and training

Commercial support and training is available from Stefan.

delphereum's People

Contributors

boulats avatar ronaldhoek avatar svanas avatar xor-el 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

delphereum's Issues

Hi, guru, I failed to apply ENS following the URL of https://svanas.medium.com/delphi-and-ethereum-name-service-ens-4443cd278af7

Hi, guru,
I failed to apply ENS following the URL of https://svanas.medium.com/delphi-and-ethereum-name-service-ens-4443cd278af7
I did connect with my MetaMask with Goerlie.
But the name like “XXX.XXXX.test” is not supported.
And the name like “XXX.XXXX.study” seemed OK but no “Confirm” or other possible buttons for me to go on with applying this domain.

Detail please refer to the attached file.
Hi guru 230511.docx

doubt in code editor

how can use repo in visual studio code or it runs only in Rad studio please give your answer as soon as possible

parse struct result

Hello, is planned to parse contract functions results like that?

struct user{
 bytes32 name;   
 string hash;   
 uint id;
}

If I use Ttupple to get responses, I don't get correct values.

Serious bug! PrivateKey -> Address Convert Wrong.

privatekey
F6E38D3232AE5D132C5BF7A01D86A549F21E84A724D546CCAD7537E3997D0E48

import metamask the correct address is

0x8B8f64aE499E2564e97A0D1ADe36F64e3B820Fa1

but

var pri:TPrivateKey:='F6E38D3232AE5D132C5BF7A01D86A549F21E84A724D546CCAD7537E3997D0E48';
pri.Address(procedure(addr : TAddress; err : IError)
begin
Memo1.Lines.Add(addr);
end
);

show
0x898967B6EFE29B008931170CA8C18711BEF9E944

i mean question ...how to use this to encode bytes32 param

example:
func(address,bytes32)

how to encode it local.not call network.

last issuse i mean your sample :
procedure TTests.TestCase9;
begin
const SS: ISingleSwap = TSingleSwap.Create
.Kind(GivenOut)
.PoolId(byteArrayToBytes32(web3.utils.fromHex('0x61d5dc44849c9c87b0856a2a311536205c96c7fd000200000000000000000000')))
.AssetIn(TAddress('0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1').ToChecksum) // WETH
.AssetOut(TAddress('0x41286Bb1D3E870f3F750eB7E1C25d7E48c8A1Ac7').ToChecksum) // BAL
.Amount(web3.utils.scale(100, 18)); // 100 BAL
Assert.AreEqual(
web3.eth.abi.encode(
'swap(' +
'(bytes32,uint8,address,address,uint256,bytes)' +
')',
[SS]
).ToLower,
'0x8fc89ecf' +
'0000000000000000000000000000000000000000000000000000000000000020' +
'61d5dc44849c9c87b0856a2a311536205c96c7fd000200000000000000000000' +
'0000000000000000000000000000000000000000000000000000000000000001' +
'000000000000000000000000dfcea9088c8a88a76ff74892c1457c17dfeef9c1' +
'00000000000000000000000041286bb1d3e870f3f750eb7e1c25d7e48c8a1ac7' +
'0000000000000000000000000000000000000000000000056bc75e2d63100000' +
'00000000000000000000000000000000000000000000000000000000000000c0' +
'0000000000000000000000000000000000000000000000000000000000000000'
);
end;

this is the only one about bytes32.but not a normal param .PoolId is a menber in tuple.

ETH_sign Error

eth_sign

use

web3.eth.crypto.sign

data(Fromjs): this problem is case by \u2019

AN OPEN LETTER TO THE DEFI COMMUNITY\nChain by chain, we have fragmented ourselves into a thousand shards.\n\nExisting in parallel, not unison, despite all sharing the ambition to reach billions of users, not just the early adopters. Together, we will go further. Together, we can do more. Together, we will rise up against the middlemen, the outdated, the opaque.\n\nIf we are to grow, we need freedom of movement.\n\nBY SIGNING THIS LETTER, I BELIEVE FREEDOM OF MOVEMENT MEANS:\n1. I can trade directly from my wallet.\n2. I am able to trade anything, across any chains. Natively.\n3. I am protected against slippage.\n4. I can trade without being frontrunned by bots.\n5. I can trade at the lowest possible cost.\n6. I can set limit orders. Across chains. Without paying gas.\n7. I know exactly what I\u2019ll receive every time I trade.\n8. I set the rules.

result:
0x39727A4CA1BB6D6119D7B92F929605A379070FC93EB77E3D152019FC068CA6050D8CD9EAA38B8BCC7147F99CF9138B64DF7CEC2A0873D4DBBDC827D6F135CBC31C

the right is:

0xE6F0556A1B29473C7FD72DECB41F412D504625FA433C4E8CBD1D6275C35798AB474264C0FCA8EDF4B1BA67126FC17772D5F9482F91F6C7246FF070A5282188DC1C

i saw the code

in web3.eth.crypto

function prefix(const msg: string): TBytes;
begin
Result := web3.utils.sha3(
TEncoding.UTF8.GetBytes(
#25 + 'Ethereum Signed Message:' + #10 + IntToStr(Length(msg)) + msg
)
);
end;

msglength use Length(msg) wrong .
should change to

function prefix(const msg: string): TBytes;
begin
var msgbytes:= TEncoding.UTF8.GetBytes(msg);
Result := web3.utils.sha3(
TEncoding.UTF8.GetBytes(
#25 + 'Ethereum Signed Message:' + #10 + IntToStr(length(msgbytes)) + msg
)
);
end;

Then it work.

Library issue.

How and where shall I can setup the path and on what IDE ? Is RAD studio -11 is suitable for that?
image
Please help as soon as possible.

Error while transferring Token with delphi with apothem network instead of infura

begin
var ERC20 := TERC20.Create(TWeb3.Create(
Ropsten, // Ropsten test net
'https://rpc.apothem.network'), // RPC access to Ethereum
'0x722dd3F80BAC40c951b51BdD28Dd19d435762180'); // TST smart contract address
try
ERC20.Transfer(
'24622d680bb9d6d80c4d3fb4b4818e738de64b521948b1b1c85616eeeda54ee1', // from private key
'0xaDDcedc01C1070bCE0aF7eb853845e7811EB649C', // to public key
1000000000000000, // 0.001 TST
procedure(hash: TTxHash; err: IError)
begin
TThread.Synchronize(nil, procedure
begin
if Assigned(err) then
MessageDlg(err.Message, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0)
else
MessageDlg(string(hash), TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOK], 0);
end);
end);
finally
ERC20.Free;
end;
end;

With Infura code is working fine but I want to transfer token with apothem network.
here, I have replaced the Ropsten, 'https://ropsten.infura.io/v3/fc4417e777f04753b0f09069f76a67c5'), with Ropsten , 'https://rpc.apothem.network'), to transfer token with apothem network. When I run and click on button It throw an error (rlp: expected input list for types.txdata) . Can you make it work for the apothem network rather than infura ?

Attempt to add the missing TSignature.Create(hex: string)

I was happy to see ecrecover added, but found out the only way to use it is to have a TSignature already.

Though I tried to make a reverse method for the TSignature.ToHex, so that a signature can be deconstructed into R,S,V from the hex string, all I'm getting back is either 0x0 or "Numbers not relatively prime".

Please consider adding a new Constructor for this, that accepts the signature hex as input param. The currently available methods are only one side of the coin. At first, I was ambitious and wanted to make and commit the code myself, but the solution seems to be eluding me.

constructor TSignature.Create(hex: string);
begin
  delete(hex,1,2);
  if length(hex)<>130 then
    raise Exception.Create('Invalid signature');

  R := TBigInteger.Create( fromHex( Copy(hex,1, 64)  ));
  S := TBigInteger.Create( fromHex( Copy(hex, 65, 64) ));
  V := TBigInteger.Create( fromHex( Copy(hex, 129, 2) ));
end;

Subscribe is missing

The entire subscription functionality built into the web3 library is missing in Delphereum. Do you have any guidance on how to create it ourselves?

Support for new ENS features

ENS has recently added new functionality in the form of two major upgrades:

Wildcard resolution (ENSIP 10) makes it possible to define wildcard subdomains, so that one resolver can provide records for all subdomains of a name.
CCIP Read (EIP 3668) makes it possible for names to be resolved using offchain data.
The combination of these two features mean it's now possible to have ENS names that are stored on L2s or on other offchain data stores such as private databases. Please refer to our doc for more detail.

We'd love to see delphereum support this new functionality (and note, EIP 3668 applies to contract interactions more generally) - please let us know if there's anything we can do to facilitate getting it added!

web3.eth.types.pas(27)

Hi, i have a problem with "ClpIECPrivateKeyParameters" unit not founded, where it is?

Code example

Hello, I would really like to use the component, but it has no documentation or examples, how do I use SwapExactETHForTokens for pancakeswap in bscscan ?

`const
URL = 'https://bsc-dataseed.binance.org';
begin
web3.eth.uniswap.v2.TRouter02.Create(TWeb3.Create(URL)).SwapExactETHForTokens('', 0, 0, '', 8989898, procedure(rcpt : ITxReceipt; err : IError)
begin
TThread.Synchronize(nil, procedure
begin
if Assigned(err) then
MessageDlg(err.Message, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0)
else
AddMsgMemo(MLogsGeral, 'Hash: ' + rcpt.txHash);

    //ShowMessage(web3.eth.utils.fromWei(qty, web3.eth.utils.ether) + ' BNB');
end);

end);

end;
`

is a wasy way to wait complete?

if i want do three step like
1.approve
2.sendTrans
3.transfer

because library is run in task so how can i wait affrove ok then sendtrans then transfer?

Delphi do not have something like await/async

BIP 39 test for BIP 32 some remarks

Ok so i have been able to get the BIP 32 going now but i found some issues.
unit web3.bip39;

class function TMnemonic.sha256(const input: TBytes): TBytes;

writes one byte less of the input due to the use of High.

stream.Write(input, High(input)+1);

Im for moving this function tot he tools unit as i need it also in bip 32.

If you change this then you must also change the
constructor TMnemonic.Create(entropy: TBytes);
begin
// checksum is the 1st byte of the SHA256 digest
const checksum = TMnemonic.sha256(entropy)[0];
where the checksum should be calculated before the
// reserve 1 extra byte for the checksum
SetLength(entropy, Length(entropy) + 1);

For BIP 32 i will also need the
HMAC_SHA512 maby that can be added to tools aswell.
Maby for the sake of simplicity also add these functions.

function b58decode(InStr: String): Tbytes;
var
ab: IBase58;
begin
ab := TBase58.Create(TBase58Alphabet.BitCoin);
result := ab.Decode(InStr);
end;

function b58encode(Bytes: Tbytes): String;
var
ab: IBase58;
begin
ab := TBase58.Create(TBase58Alphabet.BitCoin);
result := ab.Encode(Bytes);
end;

I can't compile under Delphi XE

Hello, I really need web3 and I can't compile your project from Delphi XE2, I get multiple errors that can't be easily fixed help me please

missing: supportsInterface in web3.eth.erc721

Hi,
supportsInterface is a read method of ERC721 which is missing in the web3.eth.erc721,
whether it can be perform or not, if yes can you please add (supportsInterface) read method into web3.eth.erc721 so that i can run this method as well
and can you please tell how to create a random private key to import an account in wallet (crypto wallet)

[dcc32 Fatal Error] web3.eth.gas.pas(30): F2063 Could not compile used unit 'web3.json.rpc.pas'

Hi, there are error messages when I tested it on delphi 10.2:

[dcc32 Error] web3.json.rpc.pas(169): E2250 There is no overloaded version of 'post' that can be called with these arguments
[dcc32 Error] web3.json.rpc.pas(186): E2250 There is no overloaded version of 'post' that can be called with these arguments
[dcc32 Fatal Error] web3.eth.gas.pas(30): F2063 Could not compile used unit 'web3.json.rpc.pas'

Facing Error

I Am Facing this error please help me as soon as possible
[dcc64 Error] web3.eth.abi.tests.pas(97): E2029 Expression expected but 'END' found
[dcc64 Fatal Error] delphereum.dpr(22): F2063 Could not compile used unit 'web3.eth.abi.tests.pas'
Failed

Sign Data Error

functionName
web3.eth.crypto.sign

Prikey 5b9cd58f644091919ea9eb81d03f771c2e5c15a2ad956ab5e51ac74d533232a8
besignedData "You are better than you know!"

signature 0xB080B3B050F8D0854DA7AB3971455B0D6641EB579784B5BF75D6779931DEC08A miss00 AEB67008D1015CB64DC804EFD90789B9E595FB70A44FCA1084616B7F0CA26D1C

The Right Signature is

              0xb080b3b050f8d0854da7ab3971455b0d6641eb579784b5bf75d6779931dec08a    00   aeb67008d1015cb64dc804efd90789b9e595fb70a44fca1084616b7f0ca26d1c

This Problem sotimes mis 00 in the middle sometimes in the first

Hi, guru, I failed in "transferring-ether-with-delphi" with an exception of “Invalid signature v value”, please give me a hand,thank you.

Hi, guru,

My environment:

  1. Embarcadero® Delphi 10.4 Version 27.0.38860.1461 (10.4 Update 1)
  2. Windows 7 Service Pack 1(Version 6.1, Build 7601 64-bit Edition)
  3. Ganche UI v2.7.1 from github
  4. Latest(2 weeks ago) code from https://github.com/svanas/delphereum

I tried the tutorials from 1 till 4, all is well (after very small modification of Json and TLS things) and thrilled me.
But while running the 5th: https://svanas.medium.com/transferring-ether-with-delphi-b5f24b1a98a4
I did see the confirm dialog of
“Your signature is being requested.
Network: Ethereum
From:0xfEB684
To:0xdc3111
Gas price: 20 GWei
Gas estimate: 21000 units
Gas fee: $0.80
Do you approve of this request”

But after clicking the “Yes” button, I got an exception of “Invalid signature v value” , it confused me .
Please give a hand about it, your generous help will be very appreciated 😊.

Hi, guru, while following https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93, I met an exceptiong of TsgcWSException with message 'Error Decoding Header:Switching Protocols'.

I git pull the latest : "Updating 7f5ac58..0399e95"
The error:
image
If pressed the button of "Continue".
image
More debugging detail.
image
image
While running "if not FClient.Active then repeat until FClient.Connect;", the exception triggered!
And I tried to close all the firewalls plus run the APP as administrator, still the same situation.

The code lines( I used my Alchemy API code):
procedure TFormTest.Button_Check_USDC_MemPool_Click(Sender: TObject);
var
str_item:string;
a_ctrl:TControl;
begin
a_ctrl := TControl(Sender);
str_item := a_ctrl.Name + ' ';

Mempool := TSgcMempool.Subscribe( // 1) now it is global var
Ethereum.SetRPC(URL_MY_API_MAINNET_ALCHEMY), // 2)
MY_API_NATIVE_BLOCK, // 3) my blocknative API key: 'f8XXXXXX-XXXX-XX01-XXX4-6XXXXXXXXXX3';
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // address to watch
procedure(event: TJsonObject; err: IError) // continuous events (or a blocknative error)
begin
var tx := web3.eth.blocknative.mempool.getTransaction(event);
if Assigned(tx) then
TThread.Synchronize(nil, procedure
begin
str_item := 'Pass! ' + str_item + tx.ToString;
SyncLogInMemo(self.Memo_Log
,str_item,True);
end);
end,
procedure(err: IError) // non-blocknative-error handler (probably a socket error)
begin
TThread.Synchronize(nil, procedure
begin
str_item := 'Fail! ' + str_item + err.Message;
SyncLogInMemo(self.Memo_Log_,str_item,True);
end);
end,
procedure
begin
// connection closed
str_item := 'Done! ' + str_item;
SyncLogInMemo(self.Memo_Log_,str_item,True);
end);
end;

private to address is still not ok

private key
174510fe593b2b70a521130db66c14030a3603fbee8428ba81aab48899571313
convert result is
0xF6919EB6AB62A9EFC694FD2C1416348EA61857A4

the right is

0x6ab80ed87F31B0fb567a176f7efF72c842812d2d

master Compile Error

[dcc32 Fatal Error] web3.inc(4): F1054 VCL or FMX not defined, aborting. This application contains cross-framework references. Please add $(FrameworkType) as a conditional define in this project's options.

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.