• This repository has been archived on 29/Mar/2023
  • Stars
    star
    114
  • Rank 298,248 (Top 7 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created almost 3 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Compile, deploy, and use Solidity contracts on Solana

🚨🚨🚨 NO LONGER SUPPORTED 🚨🚨🚨

The Solang Compiler no longer supports this library, and uses Anchor instead.

Please see the Solang docs for how to use Solang with Anchor.

@solana/solidity

The Solang Compiler compiles Solidity contracts to native Solana BPF programs.

This TypeScript library, inspired by Ethers.js, can deploy and interact with Solidity contracts on Solana.

Features

  • Compile, load, and deploy Solidity contracts
  • Redeploy and reuse existing contract programs
  • Call contract functions to read and write data
  • Subscribe to contract events and program logs

Quick Setup

This is a short guide to deploying and interacting with the standard ERC20 Solidity contract on Solana.

  1. Install Docker and Node.js (version 14 or higher).

  2. Clone the repositoy.

git clone https://github.com/solana-labs/solana-solidity.js.git
cd solana-solidity.js
  1. Pull the Docker images to compile and deploy your contracts:
yarn docker
  1. Start the Solana test validator:
yarn validator
  1. In a new terminal window, initialize a project:
mkdir -p project/contracts project/build
cd project
curl -o contracts/ERC20.sol \
     https://raw.githubusercontent.com/solana-labs/solana-solidity.js/master/test/examples/erc20/contracts/ERC20.sol
  1. Compile the Solidity contract:
docker run --rm -it -v $PWD:/project \
       ghcr.io/hyperledger/solang \
       -o /project/build --target solana -v /project/contracts/ERC20.sol

This outputs ERC20.abi and bundle.so files to the build directory.

  1. Install the library:
yarn add @solana/solidity

# OR

npm install @solana/solidity
  1. Create a script file to run:
touch erc20.js
  1. Paste this code in the file and save it:
const { Connection, LAMPORTS_PER_SOL, Keypair } = require('@solana/web3.js');
const { Contract } = require('@solana/solidity');
const { readFileSync } = require('fs');

const ERC20_ABI = JSON.parse(readFileSync('./build/ERC20.abi', 'utf8'));
const BUNDLE_SO = readFileSync('./build/bundle.so');

(async function () {
    console.log('Connecting to your local Solana node ...');
    const connection = new Connection('http://localhost:8899', 'confirmed');

    const payer = Keypair.generate();

    console.log('Airdropping SOL to a new wallet ...');
    const signature = await connection.requestAirdrop(payer.publicKey, 10 * LAMPORTS_PER_SOL);
    await connection.confirmTransaction(signature, 'confirmed');

    const address = publicKeyToHex(payer.publicKey);
    const program = Keypair.generate();
    const storage = Keypair.generate();

    const contract = new Contract(
        connection,
        program.publicKey,
        storage.publicKey,
        ERC20_ABI,
        payer
    );

    console.log('Deploying the Solang-compiled ERC20 program ...');
    await contract.load(program, BUNDLE_SO);

    console.log('Program deployment finished, deploying the ERC20 contract ...');
    await contract.deploy(
        'ERC20',
        ['Solana', 'SOL', '1000000000000000000'],
        storage,
        4096 * 8
    );

    console.log('Contract deployment finished, invoking some contract functions ...');
    const symbol = await contract.symbol();
    const balance = await contract.balanceOf(address);

    console.log(`ERC20 contract for ${symbol} deployed!`);
    console.log(`Your wallet at ${address} has a balance of ${balance} tokens.`);

    contract.addEventListener(function (event) {
        console.log(`${event.name} event emitted!`);
        console.log(`${event.args[0]} sent ${event.args[2]} tokens to ${event.args[1]}`);
    });

    console.log('Sending tokens will emit a "Transfer" event ...');
    const recipient = Keypair.generate();
    await contract.transfer(recipient.publicKey.toBytes(), 1000000000000000000);

    process.exit(0);
})();
  1. Run the script to deploy and interact with your contract on Solana!
node erc20.js

Build from source

  1. Clone the project:
git clone https://github.com/solana-labs/solana-solidity.js.git
cd solana-solidity.js
  1. Install the dependencies:
yarn install
  1. Compile the library from TypeScript to JavaScript:
yarn build
  1. Pull the Docker images to build and run the tests:
yarn docker
  1. Start the test validator:
yarn validator
  1. In another terminal window, build and run the tests:
yarn build:test
yarn test

More Repositories

1

solana

Web-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.
Rust
11,861
star
2

solana-program-library

A collection of Solana programs maintained by Solana Labs
Rust
2,861
star
3

solana-web3.js

Solana JavaScript SDK
TypeScript
1,749
star
4

dapp-scaffold

Scaffolding for a dapp built on Solana
TypeScript
1,636
star
5

token-list

The community maintained Solana token registry
Go
1,415
star
6

wallet-adapter

Modular TypeScript wallet adapters and components for Solana applications.
TypeScript
1,180
star
7

solana-pay

A new standard for decentralized payments.
TypeScript
1,173
star
8

example-helloworld

Hello world on Solana
TypeScript
855
star
9

solana-season

338
star
10

break

Break Solana Game
TypeScript
279
star
11

governance-ui

TypeScript
260
star
12

explorer

Explorer for Solana clusters
TypeScript
166
star
13

defi-hackathon

165
star
14

octane

Octane is a gasless transaction relayer for Solana.
TypeScript
164
star
15

chatgpt-plugin

TypeScript
160
star
16

ecosystem

Project files for Solana ecosystem members
150
star
17

obsolete-spl-zk-token

Obsolete - don't use
Rust
144
star
18

oyster

TypeScript
109
star
19

oyster-swap

TypeScript
109
star
20

solana-accountsdb-plugin-postgres

Rust
72
star
21

solana-payments-app

Solana Pay for Commerce Platforms
TypeScript
68
star
22

solana-bigtable

Shell
62
star
23

oyster-lending

TypeScript
60
star
24

whitepaper

Solana whitepaper LaTeX source
TeX
60
star
25

perpetuals

Solana perpetuals reference implementation
Rust
57
star
26

dexterity

Reference implementation of a decentralized exchange for custom instruments, risk, and fees
Rust
55
star
27

eslint-plugin-require-extensions

JavaScript
48
star
28

wallet-standard

TypeScript
46
star
29

solana-pay-scaffold

Scaffolding for a dapp using Solana Pay
TypeScript
41
star
30

solana-perf-libs

C and CUDA libraries to enhance Solana
C
37
star
31

example-tictactoe

Tic-Tac-Toe built on Solana
JavaScript
34
star
32

wormhole-hackathon

34
star
33

governance-program-library

Rust
33
star
34

example-token

Obsoleted by https://spl.solana.com/token (Token Example)
Rust
33
star
35

example-messagefeed

Simple message feed built on Solana
JavaScript
32
star
36

browser-extension

Solana Chrome Extension
TypeScript
32
star
37

security-audits

Published security audits
31
star
38

obsolete-dontuse-example-webwallet

Example Solana Web-based Wallet
JavaScript
31
star
39

platform-tools

Shell
30
star
40

solana-ping-api

solana ping api server
Go
26
star
41

cluster

Cluster Infrastructure
Shell
25
star
42

rust-bpf-sysroot

Rust sysroot source for Berkley Packet Filter Rust programs
C
20
star
43

governance-docs

JavaScript
19
star
44

solana-labs.github.io

Organization Pages
16
star
45

auto-emissions

Python
16
star
46

token-ops

Scripts and tools for token accounting and operation
Shell
14
star
47

example-move

Solana example which runs a Libra Move program
JavaScript
14
star
48

rust-bpf-builder

Dockerfile
13
star
49

solana-voib-demo

Voice over Internet & Blockchain (VoIB) demo
Rust
13
star
50

buffer-layout-utils

TypeScript utilities for using buffer-layout with Solana programs
TypeScript
12
star
51

sealevel

A parallel runtime for layer 1 blockchains
11
star
52

eslint-config-solana

ESLint rules to be shared across all Solana Labs projects
JavaScript
11
star
53

networkexplorer

Retired
JavaScript
11
star
54

twamm

Solana twamm reference implementation
TypeScript
11
star
55

network_simulation

Python
11
star
56

governance-api

TypeScript
10
star
57

wbtc

TypeScript
10
star
58

bench-tps-dos-test

UDP and QUIC dos test for buildkite using bench-tps utility
Shell
9
star
59

token-aggregator

Aggregates tokens listed in onchain token registry
TypeScript
9
star
60

newlib

Newlib is a C library intended for use on embedded systems.
C
9
star
61

solana-flagged-accounts

A community-maintained registry of flagged accounts
JavaScript
8
star
62

launchpad

Solana launchpad reference implementation
Rust
8
star
63

llvm-builder

Builds customized LLVM for Solana
Dockerfile
8
star
64

tour-de-sol

Tour de SOL
Rust
8
star
65

interns-codehub

Public repo for Solana interns
TypeScript
8
star
66

solminer

Cross-platform Solana Replicator UI ⛏️
JavaScript
7
star
67

oyster-margin

7
star
68

cargo-run-solana-tests

Cargo command to compile and run BPF test
Rust
7
star
69

ledger-app-solana

Solana app for Ledger Wallet
7
star
70

secure-wrap-token

Rust
7
star
71

dc-homedir-skeleton

Base directory struct for the `solana` user on Solana's datacenter infrastructure
Shell
6
star
72

contributor-access-policy

This document outlines the procedure for getting contributor access to various Solana Labs source code repositories
6
star
73

reddit-scaling-demo

Demo for Reddit scaling
Rust
6
star
74

inc-20210825

Tool for audit and reclaim of delegated SPL Token accounts
Rust
6
star
75

bridge-adapter

TypeScript
6
star
76

kurtosis-solana-testing

Rust
5
star
77

governance-ui-landing

Governance UI Landing Page - realms.today
TypeScript
5
star
78

k8s-cluster

5
star
79

farms

Solana Farms
Rust
5
star
80

solana-build

Rust
4
star
81

solana-tokens

Utility for distributing Solana tokens
4
star
82

prettier-config-solana

A Prettier config consistent to all Solana Labs projects
4
star
83

solana-graphql-playground

GraphQL web IDE for working with the Solana RPC-GraphQL resolver
TypeScript
4
star
84

validator-tracker

https://metrics.solana.com:3000/d/jrdi4uUWz/validator-tracker
Shell
3
star
85

oyster-bridge

3
star
86

solana-pkcs8

A utility to parse DER-encoded PKCS #8 files
Rust
3
star
87

governance-sdk

Governance SDK
TypeScript
3
star
88

solana-json-rpc-https-proxy

DEPRECATED - Provides a TLS proxy for web-based Solana JSON RPC users
Shell
2
star
89

oyster-gov

1
star
90

ipfs-ledger

1
star
91

sync_test

For developing a Github Action to sync solana-labs/solana from anza-xyz/agave
1
star
92

spl-token-subscription

Rust
1
star