Add contracts directory with template smart contract that increments a counter.

This commit is contained in:
jahooma 2021-12-07 00:44:03 -06:00
parent e8cefdabbe
commit 47eba79d05
12 changed files with 2361 additions and 0 deletions

6
contracts/.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.anchor
.DS_Store
target
**/*.rs.bk
node_modules

7
contracts/.prettierrc Normal file
View File

@ -0,0 +1,7 @@
{
"tabWidth": 2,
"useTabs": false,
"semi": false,
"trailingComma": "es5",
"singleQuote": true
}

12
contracts/Anchor.toml Normal file
View File

@ -0,0 +1,12 @@
[programs.localnet]
dpm = "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"
[registry]
url = "https://anchor.projectserum.com"
[provider]
cluster = "localnet"
wallet = "/Users/jahooma/.config/solana/id.json"
[scripts]
test = "yarn run mocha -t 1000000 tests/"

1105
contracts/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

4
contracts/Cargo.toml Normal file
View File

@ -0,0 +1,4 @@
[workspace]
members = [
"programs/*"
]

View File

@ -0,0 +1,12 @@
// Migrations are an early feature. Currently, they're nothing more than this
// single deploy script that's invoked from the CLI, injecting a provider
// configured from the workspace's Anchor.toml.
const anchor = require("@project-serum/anchor");
module.exports = async function (provider) {
// Configure client to use the provider.
anchor.setProvider(provider);
// Add your deploy script here.
}

9
contracts/package.json Normal file
View File

@ -0,0 +1,9 @@
{
"dependencies": {
"@project-serum/anchor": "^0.18.2"
},
"devDependencies": {
"chai": "^4.3.4",
"mocha": "^9.0.3"
}
}

View File

@ -0,0 +1,19 @@
[package]
name = "dpm"
version = "0.1.0"
description = "Created with Anchor"
edition = "2018"
[lib]
crate-type = ["cdylib", "lib"]
name = "dpm"
[features]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
cpi = ["no-entrypoint"]
default = []
[dependencies]
anchor-lang = "0.18.2"

View File

@ -0,0 +1,2 @@
[target.bpfel-unknown-unknown.dependencies.std]
features = []

View File

@ -0,0 +1,43 @@
use anchor_lang::prelude::*;
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
#[program]
pub mod dpm {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> ProgramResult {
let contract = &mut ctx.accounts.contract;
contract.bets = 0;
Ok(())
}
pub fn add_bet(ctx: Context<AddBet>) -> ProgramResult {
let contract = &mut ctx.accounts.contract;
contract.bets += 1;
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, payer = user, space = 9000)]
pub contract: Account<'info, Contract>,
#[account(mut)]
pub user: Signer<'info>,
pub system_program: Program <'info, System>,
}
#[derive(Accounts)]
pub struct AddBet<'info> {
#[account(mut)]
pub contract: Account<'info, Contract>,
}
#[account]
pub struct Contract {
pub bets: u64,
}

50
contracts/tests/dpm.js Normal file
View File

@ -0,0 +1,50 @@
const anchor = require('@project-serum/anchor')
const { SystemProgram } = anchor.web3
const main = async () => {
console.log('🚀 Starting test...')
const provider = anchor.Provider.env()
anchor.setProvider(provider)
const program = anchor.workspace.Dpm
// Create an account keypair for our program to use.
const baseAccount = anchor.web3.Keypair.generate()
const tx = await program.rpc.initialize({
accounts: {
contract: baseAccount.publicKey,
user: provider.wallet.publicKey,
systemProgram: SystemProgram.programId,
},
signers: [baseAccount],
})
console.log('📝 Your transaction signature', tx)
let account = await program.account.contract.fetch(baseAccount.publicKey)
console.log('👀 Bets Count', account.bets.toString())
await program.rpc.addBet({
accounts: {
contract: baseAccount.publicKey,
},
})
account = await program.account.contract.fetch(baseAccount.publicKey)
console.log('👀 Bets Count', account.bets.toString())
}
const runMain = async () => {
try {
await main()
process.exit(0)
} catch (error) {
console.error(error)
process.exit(1)
}
}
runMain()

1092
contracts/yarn.lock Normal file

File diff suppressed because it is too large Load Diff