8000 GitHub - evmauth/evmauth-core: EVMAuth is an open protocol to enable secure authorization in a simple, standard way for applications, APIs, and AI agents.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

EVMAuth is an open protocol to enable secure authorization in a simple, standard way for applications, APIs, and AI agents.

License

Notifications You must be signed in to change notification settings

evmauth/evmauth-core

Repository files navigation

EVMAuth Core

GitHub Actions Workflow Status GitHub Repo stars

An open protocol to enable secure authorization in a simple, standard way for applications, APIs, and AI agents.

EVMAuth extends the ERC-1155 standard to provide simple, EVM-based authorization state management, eliminating the need for entire categories of ubiquitous software systems to be built, operated, and maintained.

Learn more about EVMAuth

Quick Start

Setup

  1. Install Foundry:
curl -L https://foundry.paradigm.xyz | bash
  1. Copy .env.example to .env and set environment variables:
cp .env.example .env
  1. Create a Radius testnet RPC URL (if deploying to Radius): https://docs.radiustech.xyz/radius-testnet-access

Deploy Contract

  1. Load environment variables:
source .env
  1. Deploy EVMAuth contract:
forge script script/DeployEVMAuth.s.sol:DeployEVMAuth --rpc-url "$RPC_URL" --broadcast

Deploy Contract with Deterministic Address

⚠️ IMPORTANT: Set the APP_NAME and APP_VERSION in the .env file to something unique.

If you attempt to deploy the contract with the same name and version as an existing contract, it will fail because the deployment script uses the ERC-2470 Singleton Factory, for deterministic addresses.

  1. Load environment variables:
source .env
  1. Verify ERC-2470 Singleton Factory is deployed on the target network:
cast code 0xce0042B868300000d44A59004Da54A005ffdcf9f --rpc-url="$RPC_URL"
# 0x6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c63430006020033
  1. Predict contract address and project ID:
forge script script/DeployEVMAuthViaERC2470.s.sol:DeployEVMAuth --sig "predictAddress()" --rpc-url "$RPC_URL"
  1. Deploy EVMAuth contract:
forge script script/DeployEVMAuthViaERC2470.s.sol:DeployEVMAuth --rpc-url "$RPC_URL" --broadcast

Generate ABI & Bytecode

  1. Generate EVMAuth contract ABI:
forge inspect src/EVMAuth.sol:EVMAuth abi > src/EVMAuth.abi
  1. Generate EVMAuth contract bytecode:
forge inspect src/EVMAuth.sol:EVMAuth bytecode > src/EVMAuth.bin

Run Tests

  1. Run EVMAuthTest contract:
forge test --match-contract EVMAuthTest
  1. (Optional) Run test with traces and gas usage:
forge test --match-contract EVMAuthTest -vvv

Usage

Set Token Metadata

  1. Load environment variables:
source .env
  1. Run this command:
cast send --rpc-url "$RPC_URL" \
  --private-key "$PRIVATE_KEY" \
  "$CONTRACT_ADDRESS" \
  "setMetadata(uint256,bool,bool,bool,uint256,uint256)" \
  "$TOKEN_ID" \
  "$TOKEN_ACTIVE" \
  "$TOKEN_BURNABLE" \
  "$TOKEN_TRANSFERABLE" \
  "$TOKEN_PRICE" \
  "$TOKEN_TTL"
  1. Check token metadata:
cast call --rpc-url "$RPC_URL" \
  "$CONTRACT_ADDRESS" \
  "metadataOf(uint256)(uint256,bool,bool,bool,uint256,uint256)" \
  "$TOKEN_ID"

Purchase Token

  1. Load environment variables:
source .env
  1. Run this command:
cast send --rpc-url "$RPC_URL" \
  --private-key "$PRIVATE_KEY" \
  "$CONTRACT_ADDRESS" \
  "purchase(address,uint256,uint256)" \
  "$ACCOUNT_ADDRESS" \
  "$TOKEN_ID" \
  "$TOKEN_AMOUNT" \
  --value "$PAYMENT_AMOUNT"
  1. Check balance:
cast call --rpc-url "$RPC_URL" \
  "$CONTRACT_ADDRESS" \
  "balanceOf(address,uint256)(uint256)" \
  "$ACCOUNT_ADDRESS" \
  "$TOKEN_ID"

Running Ethereum Locally

  1. Start a local Ethereum node:
anvil --fork-url https://ethereum-sepolia-rpc.publicnode.com
  1. Choose an account address and private key from the anvil output, which should look like this:
                             _   _
                            (_) | |
      __ _   _ __   __   __  _  | |
     / _` | | '_ \  \ \ / / | | | |
    | (_| | | | | |  \ V /  | | | |
     \__,_| |_| |_|   \_/   |_| |_|

    0.3.0 (5a8bd89 2024-12-20T08:45:53.195623000Z)
    https://github.com/foundry-rs/foundry


Available Accounts
==================

(0) 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000.000000000000000000 ETH)
(1) 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 (10000.000000000000000000 ETH)
(2) 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (10000.000000000000000000 ETH)
(3) 0x90F79bf6EB2c4f870365E785982E1f101E93b906 (10000.000000000000000000 ETH)
(4) 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 (10000.000000000000000000 ETH)
(5) 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (10000.000000000000000000 ETH)
(6) 0x976EA74026E726554dB657fA54763abd0C3a0aa9 (10000.000000000000000000 ETH)
(7) 0x14dC79964da2C08b23698B3D3cc7Ca32193d9955 (10000.000000000000000000 ETH)
(8) 0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f (10000.000000000000000000 ETH)
(9) 0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 (10000.000000000000000000 ETH)

Private Keys
==================

(0) 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
(1) 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
(2) 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a
(3) 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6
(4) 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a
(5) 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba
(6) 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e
(7) 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356
(8) 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97
(9) 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6
  1. Change these environment variables in your .env file, using the account address and private key from anvil:
RPC_URL=http://localhost:8545
ACCOUNT_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
  1. Load environment variables:
source .env
  1. Deploy, configure, and use the EVMAuth contract as described in the previous sections.
forge script script/DeployEVMAuth.s.sol:DeployEVMAuth --rpc-url "$RPC_URL" --broadcast

SDKs & Libraries

EVMAuth provides the following SDKs and libraries for easy integration with applications and frameworks:

To request additional SDKs or libraries, create a new issue with the question label.

Contributing

To contribute to this open source project, please follow the guidelines in the CONTRIBUTING.md file.

License

The EVMAuth contract is released under the MIT License. See the LICENSE file for details.

About

EVMAuth is an open protocol to enable secure authorization in a simple, standard way for applications, APIs, and AI agents.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published
0