Helpful functions and macros for developing smart contracts on NEAR Protocol.

Overview

near-contract-tools

Helpful functions and macros for developing smart contracts on NEAR Protocol.

This package is a collection of common tools and patterns in NEAR smart contract development:

  • Storage fee management
  • Ownership pattern (derive macro available)
  • Role-based access control
  • Pausable (derive macro available)
  • Derive macro for NEP-297 events

Not to be confused with near-contract-standards, which contains official implementations of standardized NEPs. This crate is intended to be a complement to near-contract-standards.

WARNING: This is still early software, and there may be breaking changes between versions. I'll try my best to keep the docs & changelogs up-to-date. Don't hesitate to create an issue if find anything wrong.

Example

Ownership

use near_contract_tools::{Ownable, ownership::OwnershipController};
use near_sdk::{AccountId, near_bindgen};

#[derive(Ownable)]
#[near_bindgen]
struct Contract {
    // ...
}

#[near_bindgen]
impl Contract {
    #[init]
    pub fn new(owner_id: AccountId) -> Self {
        let contract = Self {
            // ...
        };

        // Initialize the owner of the contract
        contract.init_owner(owner_id);

        contract
    }

    pub fn owner_only_method(&self) {
        self.require_owner();

        // ...
    }
}

This creates a smart contract which exposes the Ownable trait to the blockchain:

pub trait Ownable {
    fn own_get_owner(&self) -> Option<AccountId>;
    fn own_get_proposed_owner(&self) -> Option<AccountId>;
    fn own_renounce_owner(&mut self);
    fn own_propose_owner(&mut self, account_id: Option<AccountId>);
    fn own_accept_owner(&mut self);
}

Events

use near_contract_tools::event::*;
use near_contract_tools::Event;
use serde::Serialize;

#[derive(Serialize)]
pub struct Nep171NftMintData {
    pub owner_id: String,
    pub token_ids: Vec<String>,
}

#[derive(Event, Serialize)]
#[event(standard = "nep171", version = "1.0.0")]
#[serde(untagged)]
pub enum Nep171 {
    #[event(name = "nft_mint")]
    NftMint(Vec<Nep171NftMintData>),
}

let my_event = Nep171::NftMint(vec![Nep171NftMintData {
    owner_id: "owner".to_string(),
    token_ids: vec!["token_1".to_string(), "token_2".to_string()],
}]);

my_event.emit(); // Emits event to the blockchain

Authors

Comments
  • Approval + Multisig(s)

    Approval + Multisig(s)

    This kind of implements the state-machine version of multisig, but the Approval construct is generic such that I think it could conceivably be used for any type of "multisig-like" process.

    enhancement 
    opened by encody 15
  • Multisig component

    Multisig component

    A few ways to implement multisig:

    1. Follow a preexisting pattern (e.g. copy/translate from core-contracts/multisig2).
      • Pros: Logic & structures predefined, pattern is somewhat well-known (at least, not new)
      • Cons: Code is not very well-maintained, large, complex (complexity = opportunity for error), not NEP-standardized, and such a standard would likely take a long time due to the complexity
    2. Implement our own: state machine (similar logic to core-contracts version)
      • Pros: We can clean up the logic from core-contracts a lot and simplify as necessary
      • Cons: Still relatively complex, and that comes with the same NEP approval difficulties.
    3. Implement our own: tx queue/approval. The idea is to accept an arbitrary transaction-like blob and simply sign&send when quorum is reached.
      • Pros: Simpler than state machine model, since we don't have to re-implement every possible action in our own custom data structures. Management actions (e.g. add member) could be implemented as normal #[private] functions which are called via normal, reflexive FUNCTION_CALL proposal blobs. Possibly easier to standardize as NEP since the logic is simpler.
      • Cons: Contract will have to do a little extra legwork (tx blob parsing) if it wants to implement any sort of limits on what sort of actions can be proposed, since this implementation would be written for generically signing opaque transaction blobs. I'm not aware if this pattern has been implemented before (on NEAR), so this would be new technology. Requires more testing, and I'm not even absolutely sure it's possible since I've not written a PoC.
    4. Implement our own: transaction signing protocol. Accept a transaction blob and an array of signatures (generated off-chain).
      • Pros: Probably the most straightforward implementation of multisig.
      • Cons: Suffers from the same lack of control as option 3 since it accepts an opaque blob. Requires some sort of off-chain mechanism for generating signatures.
    enhancement help wanted 
    opened by encody 15
  • basic `cargo fmt -- --check` pre-commit hook

    basic `cargo fmt -- --check` pre-commit hook

    @encody For https://near-foundation.atlassian.net/browse/ENG-149 , what do you think about this?

    Adding a server-side CI tool looked more complicated than it's worth (for our small team at this point, I think).

    opened by ryancwalsh 7
  • Re-export traits at top level to show them in top level doc page

    Re-export traits at top level to show them in top level doc page

    The top level doc page for the package shows the modules but not the traits it offers.

    Since the primary aim of this repo is to capture common patterns as traits. They can be exposed at the top level. This is will also expose those traits in the top level documentation. This can be done by re-exporting them from lib.rs.

    Again we can take a cue from serde docs and lib.rs

    documentation enhancement 
    opened by twitu 6
  • Add unchecked versions of functions with no side-effects or permissioning

    Add unchecked versions of functions with no side-effects or permissioning

    ~For example, ownership::Ownership::propose_owner_internal would not call require_owner or emit an OwnershipEvent::Propose event.~

    For Owner, it might make more sense to just have a non-event-emitting version of update_owner and update_proposed. For Pause, set_is_paused already doesn’t emit events or have any require! calls, so it wouldn’t require updating for this issue. I think the method names could use some work though, i.e. just by looking at the name of the method I should be able to tell whether it emits events & performs, for example, predecessor checks, and also the method that does perform those things should appear to the untrained eye as the “natural” choice. Hence, I had initially thought using names like update_owner_internal would be a good idea, but maybe update_owner_unchecked would be a better choice.

    enhancement 
    opened by encody 6
  • Macro for upgradable contracts

    Macro for upgradable contracts

    It would be very neat to have a standardized way of upgrading a smart contract and migrating its state to mitigate common security vulnerabilities.

    • Should provide a callback for calling a migration state
    • Can only be executed with a full access key or by the contract owner.
    • Possibly support storing the previous state of the contract in case of an immediate rollback
    enhancement 
    opened by roshaans 5
  • Specify crate in every macro

    Specify crate in every macro

    serde uses this nifty field on their macros to allow you to specify the actual crate it should be using as the "serde" crate:

    #[serde(crate = "path::to::serde")]
    

    Emulating this pattern is useful:

    • Currently there is an inconsistent use of leading colons :: in the macros
    • It's weird to try to use the near_contract_tools_macros in near_contract_tools for this reason
    • Some macros make use of other crates' types (near_sdk and serde, particularly). near_sdk reexports its own version of serde, so some users may wish to use that version (also we should discuss what the default serde crate should be @ryancwalsh @nearken).
    opened by encody 4
  • Simple multisig derive macro

    Simple multisig derive macro

    Writes a decent amount of the boilerplate per discussion with @nearken . Does not expose a public interface (difficult with generics + NEP requirement). Usage: see updated workspaces test.

    enhancement 
    opened by encody 4
  • Fuller examples

    Fuller examples

    Let's add (in a separate repo if necessary... and this one can link to it) complete examples of projects taking advantage of near-contract-tools.

    E.g. https://github.com/NEARFoundation/near-contract-tools/blob/01a64242717af71a27fa49197a96912d1c5aeedb/README.md#fungible-token isn't enough to get me started. Part (most?) of it is that I'm new to Rust, but I'm having trouble knowing where to put these lines, what Cargo.toml needs to contain, how to build the project, etc. So a full working example would be helpful.

    I looked at https://github.com/NEAR-Edu/near-certification-tools/blob/938255e1adbecbe0605c2749f9a7ebd9a9df317a/data-contract/src/contract.rs#L5 but couldn't figure it out. (Maybe certain types of macros are different from "derive" macros?

    opened by ryancwalsh 3
  • Package renaming

    Package renaming

    This issue is resolved when all of the below point are resolved or moot:

    • Should the name of the package be changed?
    • To what should the name of the package be changed?
    • All internal references/mentions have been updated, the repository has been moved, the old package has been deprecated on crates.io, and the renamed package has been published to crates.io.
    documentation enhancement breaking change 
    opened by encody 2
  • Write security invariants for every component

    Write security invariants for every component

    For assistance on the audit, every component should have a list of invariants / assumptions for use and for every function. For example, the Owner component's list would include:

    • The root storage key is not used for any other data.
    • Only the owner will ever be able to call own_renounce_owner, own_propose_owner.
    • Only the account most recently proposed (by the current owner, via own_propose_owner) will be able to call own_accept_owner.
    • After own_accept_owner has been called, the formerly "proposed owner" will become the owner, and the former owner will be removed. There will not be a "proposed owner".
    • Et cetera.

    This list should appear in the module level documentation comments for each component.

    documentation 
    opened by encody 2
  • Make internal functions more obviously internal

    Make internal functions more obviously internal

    Currently, many of the components are composed of traits that contain methods that are primarily (nigh exclusively) for internal use (e.g. many of them have a root() function that returns a Slot). For someone who isn't super familiar with how this library works, these methods may appear to be freely usable, and may unintentionally cause the component to malfunction by their misuse.

    There are a few ways we could think about fixing this problem:

    1. Just be really clear in the documentation which functions are for general use and which ones are internal.
    2. Rename the functions… a. …by prefixing with an underscore (e.g. root -> _root). b. …by prefixing with a word (e.g. root -> internal_root).
    3. We could consider using #[doc(hidden)], but I don't think that's really what that attribute is for.
    4. Split the internal functions off into a separate trait.
    5. Restructure the entire library such that hidden/private functions are actually hidden/private. Probably quite difficult to do at this point in the library's development, plus it would almost definitely make the derive macros more complicated to correctly implement.
    opened by encody 1
  • Payroll contract example

    Payroll contract example

    The contract demonstrates a simplified but relatable real world scenario where a payroll management contract can add and pay employees.

    Among other things it demonstrates how and where to use macros for Rbac and patterns around collections, storage keys and Promises and handling errors in a non-trivial example.

    Next step is to handle more error cases, include a multi-sig approval in this and create test cases to show how it works.

    opened by twitu 8
  • RFC: Backed token / Treasury manager component

    RFC: Backed token / Treasury manager component

    For smart contracts that manage multiple NEP-141 tokens in a treasury and issue a backed token. Inspired by the Skyward Finance hack. Should work well in conjunction with the existing NEP-141 infrastructure in this package (optional).

    • Provides mint and redeem actions. Each action could be exposed / limited / permissioned by the contract author as desired.
    • Mint action is backed by something (token, NEAR native, etc.). This would be specified by the contract author, probably via some sort of hook.
    • Redeem action would return the backing asset(s) to the redeemer.
    • Mechanism for controlled / limited release (e.g. time release, cliff / vest schedule, etc.)

    Request for comments

    • Design suggestions
    • Should the component that would solve the Skyward issue be a "backed token" (i.e. NEP-141 extension of sorts) or a "treasury manager" (contract-agnostic multi-token (NEP-141 only?) manager)
    • Is this component in-scope for this project? It is definitely a little bit more "niche" in use-case, but I think if the component is sufficiently generalized, it could be useful for implementing:
      • Arbitrary token lockups (cliff/vest schedule)
      • Backed tokens (single- and multi-asset)
      • DAO treasuries
    enhancement question 
    opened by encody 0
  • Identities component

    Identities component

    Like a generic version of Owner. Like Rbac, but there is a 1:0..1 relationship between an identity and an account ID. It will also be possible to retrieve the holder of an identity (enumeration is not possible in the current version of Rbac). Identity transfer (via propose/accept) and renunciation are optionally allowed.

    Possible Example

    enum Identity {
        Owner,
        Administrator,
        Manager,
    }
    
    #[derive(Identities)]
    #[identities(identities = "Identity")]
    #[near_bindgen]
    struct MyContract {}
    
    #[near_bindgen]
    impl MyContract {
        #[init]
        fn init() -> Self {
            let mut contract = Self {};
    
            contract.initialize_identity(&Identity::Owner, env::predecessor_account_id());
            contract.initialize_identity(&Identity::Administrator, env::predecessor_account_id());
            contract.initialize_identity(&Identity::Manager, env::predecessor_account_id());
        }
    
        fn only_owner(&self, account: AccountId) {
            self.require_identity(&Identity::Owner);
        }
    
        fn only_administrator(&self, account: AccountId) {
            self.require_identity(&Identity::Administrator);
        }
    }
    
    impl IdentityHook<Identity> for MyContract {
        fn on_transfer(identity: &Identity, from: AccountId, to: AccountId) -> Result<(), ?> { }
    
        fn on_propose(identity: &Identity, account: AccountId) -> Result<(), ?> { }
    
        fn on_accept(identity: &Identity, account: AccountId) -> Result<(), ?> { }
    }
    

    Would expose the following interface to the blockchain:

    (Caveat: Identities need a to/from string serialization)

    trait IdentityExternal<Identity> {
        fn id_is(&self, account: AccountId, identity: Identity) -> bool;
        fn id_get(&self, identity: Identity) -> Option<AccountId>;
        fn id_renounce(&mut self, identity: Identity);
        fn id_propose(&mut self, identity: Identity, to: AccountId);
        fn id_accept(&mut self, identity: Identity, from: AccountId);
    }
    
    enhancement 
    opened by encody 1
  • Feature idea: Build ID

    Feature idea: Build ID

    Macro that adds an external method that returns the commit hash of the build.

    This should be possible because macros run at compile time.

    Existing similar NEP: https://github.com/near/NEPs/blob/master/neps/nep-0330.md

    Possible Example Usage

    trait BuildId {
        fn build_id(&self) -> String;
    }
    
    #[derive(BuildId)]
    #[derive(BorshSerialize, BorshDeserialize, PanicOnDefault)]
    #[near_bindgen]
    pub struct MyContract {
        // ...
    }
    
    let contract = MyContract::new();
    println!("{}", contract.build_id()); // 6a5992033dc4a092a5d45d64b4f205ce9aeb2939
    
    enhancement 
    opened by encody 0
Releases(v0.7.2)
  • v0.7.2(Dec 16, 2022)

    What's Changed

    • Fuller Iterator implementation for Rbac iterator by @encody in https://github.com/NEARFoundation/near-sdk-contract-tools/pull/105
    • Disallows Event name collisions by @encody in https://github.com/NEARFoundation/near-sdk-contract-tools/pull/108

    Full Changelog: https://github.com/NEARFoundation/near-sdk-contract-tools/compare/v0.7.1...v0.7.2

    Source code(tar.gz)
    Source code(zip)
  • v0.7.1(Nov 19, 2022)

    What's Changed

    • Optimize Rbac::has_role by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/102

    Full Changelog: https://github.com/NEARFoundation/near-contract-tools/compare/v0.7.0...v0.7.1

    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Nov 15, 2022)

    What's Changed

    • Add more derives to events by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/66
    • upgradability functionality by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/48
    • fix: upgrade workspaces version to 0.6 by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/81
    • Allow enums to be annotated with event macro by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/77
    • Owner uses borsh storage keys by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/78
    • Events overhaul by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/82
    • Use dtolnay/rust-toolchain by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/87
    • Add safety invariants to owner module docs by @twitu in https://github.com/NEARFoundation/near-contract-tools/pull/75
    • Default storage keys enum by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/90
    • Link items in docs and other improvements by @twitu in https://github.com/NEARFoundation/near-contract-tools/pull/91
    • Upgrade macro by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/84
    • fix: remove near-sdk default features usage by @austinabell in https://github.com/NEARFoundation/near-contract-tools/pull/98
    • FungibleTokenMetadata: Cow -> String by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/100
    • Makes Rbac iterable by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/99

    New Contributors

    • @austinabell made their first contribution in https://github.com/NEARFoundation/near-contract-tools/pull/98

    Full Changelog: https://github.com/NEARFoundation/near-contract-tools/compare/v0.6.1...v0.7.0

    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Sep 22, 2022)

    What's Changed

    • Fix FT events & NEP-297 API improvements by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/63

    Full Changelog: https://github.com/NEARFoundation/near-contract-tools/compare/v0.6.0...v0.6.1

    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Sep 20, 2022)

    What's Changed

    • basic cargo fmt -- --check pre-commit hook by @ryancwalsh in https://github.com/NEARFoundation/near-contract-tools/pull/20
    • Workspaces tests by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/19
    • implemented prohibit_role by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/23
    • Improved the error message and comments in hooks/pre-commit, and the … by @ryancwalsh in https://github.com/NEARFoundation/near-contract-tools/pull/21
    • Fix formatting by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/24
    • Eng 150 improve documentation for near contract tools by @ryancwalsh in https://github.com/NEARFoundation/near-contract-tools/pull/28
    • Migrate hooks by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/29
    • adding unchecked function versions for owner by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/33
    • re-implementing checked functions and adding unit tests by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/34
    • Extract error strings to constants by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/37
    • standardizing naming convention between unchecked and internal functions by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/36
    • adding ext_contract to all external traits by @nearken in https://github.com/NEARFoundation/near-contract-tools/pull/38
    • Require clippy linting by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/40
    • Use associated type for Rbac Role type by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/43
    • Approval + Multisig(s) by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/39
    • Simple multisig derive macro by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/42
    • Action::execute takes mutable contract reference by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/46
    • Remove unnecessary &self parameter from NEP-141 functions by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/47
    • Testing README.md examples, rustdoc warnings, update dependencies by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/52
    • Improve events by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/55
    • Remove unsafe from Slot, nicer doc links by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/58
    • Cache cargo in GH Actions & run workspaces-tests as GH Action by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/60
    • Specify crate in every macro by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/57

    New Contributors

    • @ryancwalsh made their first contribution in https://github.com/NEARFoundation/near-contract-tools/pull/20
    • @nearken made their first contribution in https://github.com/NEARFoundation/near-contract-tools/pull/23

    Full Changelog: https://github.com/NEARFoundation/near-contract-tools/compare/v0.5.0...v0.6.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Aug 11, 2022)

    What's Changed

    • Default Struct Migration by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/14
    • Token Standard: NEP-141 (Fungible Token) by @encody in https://github.com/NEARFoundation/near-contract-tools/pull/13

    Full Changelog: https://github.com/NEARFoundation/near-contract-tools/compare/v0.4.0...v0.5.0

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jul 11, 2022)

    What's Changed

    • Storage Slots by @encody in https://github.com/encody/near-contract-tools/pull/9
    • Public interface traits by @encody in https://github.com/encody/near-contract-tools/pull/10

    Full Changelog: https://github.com/encody/near-contract-tools/compare/v0.3.5...v0.4.0

    Source code(tar.gz)
    Source code(zip)
zink! is a library for developing ink! smart contracts with useful Rust macros that extend functionality and reduce boilerplate code.

zink! Smart Contract Macros This is a helper library for developing ink! smart contracts. It contains useful Rust macros that extend functionality and

Scio Labs 3 Nov 3, 2023
evm2near compiles Solidity contracts into NEAR WebAssembly contracts.

EVM → NEAR evm2near is a project for compiling EVM bytecode into wasm bytecode, with the particular goal of having that wasm artifact be executable on

Aurora 125 Dec 3, 2022
Minimal Substrate node configured for smart contracts via pallet-contracts.

substrate-contracts-node This repository contains Substrate's node-template configured to include Substrate's pallet-contracts ‒ a smart contract modu

Parity Technologies 73 Dec 30, 2022
Smart contracts powering Spectrum Protocol on Terra

Spectrum Core Contracts This monorepository contains the source code for the core smart contracts implementing Spectrum Protocol on the Terra blockcha

Spectrum Protocol 38 Dec 19, 2022
This monorepository contains the source code for the smart contracts implementing bAsset Protocol on the Terra blockchain.

Crll bAsset Contracts This monorepository contains the source code for the smart contracts implementing bAsset Protocol on the Terra blockchain. You c

null 3 Mar 29, 2024
Blazing fast toolkit for developing Starknet contracts.

Starknet Foundry Blazingly fast toolkit for developing Starknet contracts designed & developed by ex Protostar team from Software Mansion based on nat

Foundry 149 Aug 1, 2023
Confidential credit scores and loan disbursal, powered by zkSNARKs and NEAR Protocol

zkLoans zkLoans brings confidential Credit Scores. It proves to a counterparty if you meet threshold requirements for a credit score without revealing

Anirudha Bose 2 Sep 13, 2022
A tutorial for an NFT Market Place Built with Near Protocol and React.js

nft-marketplace-part-1 A tutorial for an NFT Market Place built using Near Protocol and React.js. Preview To run this app locally, follow below steps:

Kohwo Orien 5 Jun 29, 2022
Reference client for NEAR Protocol

Reference implementation of NEAR Protocol About NEAR NEAR's purpose is to enable community-driven innovation to benefit people around the world. To ac

NEAR 2k Jan 3, 2023
A PoC backbone for NFT Marketplaces on NEAR Protocol

NFT Market Reference Implementation A PoC backbone for NFT Marketplaces on NEAR Protocol. Reference Changelog Changelog Progress: basic purchase of NF

null 9 May 26, 2022
Reference client for NEAR Protocol

Reference implementation of NEAR Protocol About NEAR NEAR's purpose is to enable community-driven innovation to benefit people around the world. To ac

NEAR 2k Jan 4, 2023
Durudex Near Protocol Token.

Durudex Near Token ?? Prerequisites Rust Near CLI ⚙️ Build To build a token you will need to use this: cargo build --all --target wasm32-unknown-unkno

Durudex 2 May 31, 2022
Lesson 1 - Fundamental structure of smartcontract of near protocol

NEAR CONTRACT dev-1672293046853-49717456344735 pnpm run deploy > [email protected] deploy /Users/vudangquang/Courses/VBI-Courses/rs-contract > cd co

Dang Quang Vu 3 Jan 7, 2023
Ticketed Discreet Log Contracts (DLCs) to enable instant buy-in for wager-like contracts on Bitcoin.

dlctix Ticketed Discreet Log Contracts (DLCs) to enable instant buy-in for wager-like contracts on Bitcoin. This project is part of the Backdrop Build

null 7 Feb 29, 2024
Rust client to Opensea's APIs and Ethereum smart contracts

opensea.rs Rust bindings & CLI to the Opensea API and Contracts CLI Usage Run cargo r -- --help to get the top level help menu: opensea-cli 0.1.0 Choo

Georgios Konstantopoulos 226 Dec 27, 2022
A framework for creating PoC's for Solana Smart Contracts in a painless and intuitive way

Solana PoC Framework DISCLAIMER: any illegal usage of this framework is heavily discouraged. Most projects on Solana offer a more than generous bug bo

Neodyme 165 Dec 18, 2022
Rust client to Seaport's APIs and Ethereum smart contracts(WIP)

Seaport-rs WIP - WORK IN PROGRESS. REFER TO https://github.com/Alcibiades-Capital/quay FOR PRODUCTION READY CODE I'm new to Rust and seek to be legend

Perelyn 21 Nov 29, 2022
Rust project for working with ETH - Ethereum transactions with Rust on Ganache and also deploy smart contracts :)

Just a test project to work with Ethereum but using Rust. I'm using plain Rust here, not Foundry. In future we will use Foundry. Hope you're already f

Akhil Sharma 2 Dec 20, 2022
RGB smart contracts: client-facing library & command-line for desktop and mobile

RGB smart contracts RGB is confidential & scalable client-validated smart contracts for Bitcoin & Lightning. It embraces the concepts of private & mut

RGB: scalable & private smart contracts for bitcoin & lightning 4 Mar 15, 2023