cpp-sdk README

The project's README from github.com/QuipNetwork/cpp-sdk. As one markdown file: README.md.

Quip C++ SDK

A C++ SDK for interacting with Quip smart contracts on Ethereum networks.

Features

Building

  1. Clone the repository:
git clone https://github.com/QuipNetwork/quip-cpp-sdk.git
cd quip-cpp-sdk
  1. Run the build script:
./build.sh

This will build both the CLI tool and run the test suite.

Usage

CLI Tool

The CLI tool supports both local development and custom network configurations.

Getting Help

# Show comprehensive help and usage information
./build/quip-cli --help

Local Development (Default)

For local development with Hardhat:

./build.sh

Running the CLI

Basic usage:

./build/quip-cli <command> [args]

Commands:

To generate post-quantum keypairs and signatures, please use the hashsigs-cpp library.

End-to-End (E2E) Testing

To run E2E tests against a real blockchain (local devnet, testnet, or mainnet), follow these steps:

  1. Deploy Contracts on a Local Devnet or Testnet

    Use the existing ethereum-sdk project to deploy the QuipFactory and QuipWallet contracts on localhost or use a sepolia contract on eg mainnet or base. For example, from the ethereum-sdk directory:

    cd ../ethereum-sdk
    npx hardhat node & INITIAL_OWNER=$PUBLIC_ADDRESS_YOU_CONTROL npx hardhat run scripts/deploy.ts --network hardhat
    

    This will deploy the contracts and output their addresses, but your local addresses will not match the default addresses and the transaction will unwind.

    Get your local Deployer, WOTSPlus, and QuipFactory addresses and write the deployer address to your ethereum-sdk .env file, then write all three contract addresses to ethereum-sdk/src/addresses.json and run the command again.

    You can check that your contracts are deployed by running npx hardhat console and using the following command with "Deployer" | "WOTSPlus" | "QuipFactory" as the contractName and the associated contract address as contractAddress

    await ethers.getContractAt(`${contractName}`, `${contractAddress}`);
    
  2. Run the E2E Test Script

    Use the provided bash script to run the CLI against the deployed contracts:

# Show E2E test script help
./e2e_test.sh --help

# Run all tests against local Hardhat network
./e2e_test.sh

# Run specific CLI commands
./build/quip-cli --rpc-url "https://base-sepolia.g.alchemy.com/v2/your_api_key_here" --contract-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99" deposit <pubkey> <sig> <private_key>

Custom Networks

When using a custom RPC_URL or CHAIN_ID, you must provide a QuipFactory contract address:

# Test against Sepolia testnet
./e2e_test.sh \
  --rpc-url "https://eth-sepolia.g.alchemy.com/v2/your_api_key_here" \
  --chain-id 11155111 \
  --quip-factory-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99"

# Test against Base mainnet
./e2e_test.sh \
  --rpc-url "https://mainnet.base.org" \
  --chain-id 8453 \
  --quip-factory-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99"

CLI Commands

# Deploy a new Quip wallet
./build/quip-cli --rpc-url <url> --contract-address <factory_address> deposit <pubkey> <sig> <private_key>

# Transfer funds
./build/quip-cli --rpc-url <url> --contract-address <factory_address> transfer <pubkey> <sig> <to_address> <amount> <private_key>

# Execute contract call
./build/quip-cli --rpc-url <url> --contract-address <factory_address> execute <pubkey> <sig> <target_address> <opdata> <private_key>

# Change PQ owner
./build/quip-cli --rpc-url <url> --contract-address <factory_address> change-owner <pubkey> <sig> <private_key>

# Check wallet balance
./build/quip-cli --rpc-url <url> --contract-address <factory_address> balance <address>

# Check PQ owner
./build/quip-cli --rpc-url <url> --contract-address <factory_address> pq-owner <address>

Configuration

Environment Variables

Create a .env based on the .env.example file in the ethereum-sdk directory.

Contract Addresses

For local development, contract addresses are automatically loaded from ethereum-sdk/src/addresses.json.

For custom networks, you must provide the QuipFactory contract address using the --quip-factory-address parameter.

Testing

Unit Tests

cd build && ./quip-cli-tests

End-to-End Tests

# Show E2E test help
./e2e_test.sh --help

# Local development
./e2e_test.sh

# Custom network
./e2e_test.sh --rpc-url <url> --chain-id <id> --quip-factory-address <address>

Network Requirements

Local Development

Custom Networks

Error Handling

The CLI validates:

Examples

Complete Workflow

# 1. Deploy a new wallet
./build/quip-cli --rpc-url "https://base-sepolia.g.alchemy.com/v2/your_api_key_here" --contract-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99" deposit <pubkey> <sig> <private_key>

# 2. Transfer funds
./build/quip-cli --rpc-url "https://base-sepolia.g.alchemy.com/v2/your_api_key_here" --contract-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99" transfer <pubkey> <sig> "0x1234..." "1000000000000000000" <private_key>

# 3. Execute contract call
./build/quip-cli --rpc-url "https://base-sepolia.g.alchemy.com/v2/your_api_key_here" --contract-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99" execute <pubkey> <sig> "0x5678..." "0x12345678" <private_key>

# 4. Change owner
./build/quip-cli --rpc-url "https://base-sepolia.g.alchemy.com/v2/your_api_key_here" --contract-address "0x4a5A444F3B12342Dc50E34f562DfFBf0152cBb99" change-owner <pubkey> <sig> <private_key>

Dependencies

License

AGPL-3.0, see COPYING

cpp-sdk (QuipNetwork/cpp-sdk)

Searching Database…

11.3K ·GitHub
Что это такое?Quip C++ SDK — это клиентская библиотека и инструмент командной строки для работы с умными контрактами Quip в сети Ethereum. Он позволяет развертывать и управлять кошельками «Quip», которые используют постквантовые подписи Winternitz вместо стандартных ключей ECDSA.
Это библиотека, инструмент командной строки или и то, и другое?И то, и другое: это SDK на C++ (код библиотеки для операций с QuipFactory и QuipWallet), который также включает инструмент командной строки для развертывания кошельков, перевода средств и запуска тестов.
Как его собрать и запустить?Склонируйте репозиторий и запустите ./build.sh: скрипт соберет инструмент командной строки и запустит набор тестов. По умолчанию инструмент работает с локальной сетью Hardhat.
Что нужно установить, чтобы собрать это?Нужны CMake 3.10+, компилятор с поддержкой C++17, libcurl, nlohmann/json, Google Test и OpenSSL 3.0+. Для локального тестирования также понадобится ethereum-sdk на основе Hardhat, чтобы развернуть контракты Quip.
SDK сам генерирует постквантовые ключи?Нет, генерация ключей для постквантовых подписей Winternitz здесь не входит; для создания пар ключей и подписей нужна отдельная библиотека hashsigs-cpp.
Что я могу делать с кошельком Quip через инструмент командной строки?Поддерживаются команды deposit (развертывание нового кошелька с подписями Winternitz), transfer, execute, change-owner, balance и pq-owner для управления владельцем контракта и средствами.
Можно ли подключить это к другой сети, а не к локальной Hardhat?Да, можно указать любой действующий RPC-адрес Ethereum и идентификатор сети (chain ID), но для пользовательских сетей нужно передать действующий адрес контракта QuipFactory через --quip-factory-address.
Как настраиваются адреса контрактов для локальной разработки?При локальной разработке с Hardhat адреса загружаются автоматически из ethereum-sdk/src/addresses.json, после того как вы сами развернете контракты Deployer, WOTSPlus и QuipFactory.
Зачем использовать подписи Winternitz вместо обычных ключей Ethereum?Одноразовые подписи Winternitz (WOTS) устойчивы к постквантовым атакам, поэтому кошельки Quip, построенные на них, призваны противостоять атакам будущих квантовых компьютеров, которые могли бы взломать стандартные аккаунты Ethereum с ключами ECDSA.
Size
0.1 MB
Stars
11.3K
Updated
CommitJul 09
Age
1y
Commits · 90 Days