Version 1.0.5
Complete Guide for Zero Gas Cost Blockchain Development
Before installing PureChainLib, ensure your system meets the following requirements:
| Component | Minimum Version | Recommended Version |
|---|---|---|
| Node.js | 16.0.0 | 18.0.0 or later |
| npm | 8.0.0 | 9.0.0 or later |
| Operating System | Windows 10, macOS 10.14, Ubuntu 18.04 | Latest stable versions |
| RAM | 4 GB | 8 GB or more |
| Disk Space | 500 MB | 1 GB or more |
The recommended way to install PureChainLib is through npm:
npm install purechainlib
For global installation (to use CLI tools):
npm install -g purechainlib
To install from the source code:
# Clone the repository
git clone https://github.com/islarpee000/purechainlib.git
# Navigate to the project directory
cd purechainlib
# Install dependencies
npm install
# Build the project
npm run build
Create a test file to verify the installation:
// test-install.js
const { PureChain } = require('purechainlib');
console.log('PureChainLib installed successfully!');
const purechain = new PureChain();
console.log('PureChain instance created');
Run the test:
node test-install.js
Create a new project directory and initialize it:
mkdir my-purechain-project
cd my-purechain-project
npm init -y
npm install purechainlib
Create a configuration file for your project:
// config.js
module.exports = {
network: 'testnet', // or 'mainnet' when available
apiPort: 3000,
wsPort: 3001,
dataDir: './blockchain-data',
logLevel: 'info'
};
Create a .env file for sensitive configuration:
# .env
NODE_ENV=development
API_PORT=3000
WS_PORT=3001
DATA_DIR=./blockchain-data
LOG_LEVEL=info
| Operation | Traditional Blockchain | PureChain |
|---|---|---|
| Simple Transfer | $0.50 - $5.00 | FREE ($0.00) |
| Token Contract Deployment | $50 - $500 | FREE ($0.00) |
| NFT Minting | $10 - $100 | FREE ($0.00) |
| Smart Contract Interaction | $1 - $20 | FREE ($0.00) |
When using PureChainLib, you don't need to:
// Traditional blockchain (NOT needed in PureChain)
const gasPrice = await web3.eth.getGasPrice();
const gasLimit = 21000;
const totalCost = gasPrice * gasLimit;
// PureChain - Simple and free!
const result = await purechain.contractEngine.deployContract(config, deployer, 0);
The simplest way to connect to PureChain:
const { PureChain } = require('purechainlib');
async function connect() {
// Creates instance with default testnet configuration
const purechain = new PureChain();
// Start the connection
await purechain.start();
console.log('Connected to:', purechain.networkConfig.name);
console.log('Chain ID:', purechain.networkConfig.chainId);
console.log('RPC URL:', purechain.networkConfig.rpcUrl);
// Always stop when done
await purechain.stop();
}
connect();
Connect with specific configuration options:
const { PureChain } = require('purechainlib');
async function customConnect() {
const purechain = new PureChain({
networkConfig: 'testnet',
blockchain: {
difficulty: 2,
miningReward: 100
},
api: {
port: 3000,
rateLimit: {
windowMs: 15 * 60 * 1000,
max: 100
}
},
storage: {
type: 'memory'
}
});
await purechain.start();
// Your blockchain operations
await purechain.stop();
}
customConnect();
Monitor connection status:
const purechain = new PureChain();
// Before connection
console.log('Provider:', purechain.provider); // null
// Start connection
await purechain.start();
console.log('Provider connected:', purechain.provider !== null); // true
// Check network details
if (purechain.provider) {
const blockNumber = await purechain.provider.getBlockNumber();
console.log('Current block:', blockNumber);
}
// Disconnect
await purechain.stop();
console.log('Provider disconnected');
const { PureChain, Transaction, TransactionType } = require('purechainlib');
async function createTransfer() {
const purechain = new PureChain();
await purechain.start();
// Method 1: Using blockchain.createTransaction
purechain.blockchain.createTransaction({
from: 'alice',
to: 'bob',
amount: 100,
timestamp: Date.now()
});
// Method 2: Using Transaction class
const tx = new Transaction({
from: 'alice',
to: 'bob',
amount: 100,
type: TransactionType.TRANSFER,
data: { message: 'Payment for services' }
});
// Transaction properties
console.log('Transaction ID:', tx.id);
console.log('From:', tx.from);
console.log('To:', tx.to);
console.log('Amount:', tx.amount);
console.log('Fee:', tx.fee); // Always 0
console.log('Timestamp:', new Date(tx.timestamp).toISOString());
// Add to blockchain
purechain.blockchain.addTransaction(tx);
await purechain.stop();
}
createTransfer();
PureChain supports multiple transaction types:
| Type | Purpose | Required Fields |
|---|---|---|
| TRANSFER | Send funds between addresses | from, to, amount |
| CONTRACT_CREATION | Deploy new smart contract | from, data (contract code) |
| CONTRACT_CALL | Interact with smart contract | from, to (contract), data (method) |
| STAKE | Stake tokens for PoS | from, amount, data (duration) |
| UNSTAKE | Remove staked tokens | from, amount |
async function batchTransactions() {
const purechain = new PureChain();
await purechain.start();
// Create multiple transactions
const transactions = [
{ from: 'alice', to: 'bob', amount: 50 },
{ from: 'alice', to: 'charlie', amount: 30 },
{ from: 'bob', to: 'david', amount: 20 },
{ from: 'charlie', to: 'eve', amount: 10 }
];
// Add all transactions to pending pool
transactions.forEach(tx => {
purechain.blockchain.createTransaction({
...tx,
timestamp: Date.now()
});
});
console.log('Pending transactions:', purechain.blockchain.pendingTransactions.length);
// Mine all transactions in one block
await purechain.blockchain.minePendingTransactions('miner');
console.log('All transactions processed!');
console.log('Total gas cost: 0');
await purechain.stop();
}
batchTransactions();
async function mineBlocks() {
const purechain = new PureChain();
await purechain.start();
// Add some transactions
purechain.blockchain.createTransaction({
from: 'alice',
to: 'bob',
amount: 100,
timestamp: Date.now()
});
console.log('Before mining:');
console.log('Pending transactions:', purechain.blockchain.pendingTransactions.length);
console.log('Chain length:', purechain.blockchain.chain.length);
// Mine the block
const minerAddress = 'miner1';
await purechain.blockchain.minePendingTransactions(minerAddress);
console.log('\\nAfter mining:');
console.log('Pending transactions:', purechain.blockchain.pendingTransactions.length);
console.log('Chain length:', purechain.blockchain.chain.length);
console.log('Miner reward:', purechain.blockchain.getBalance(minerAddress));
// Get the latest block
const latestBlock = purechain.blockchain.getLatestBlock();
console.log('\\nLatest block:');
console.log('Index:', latestBlock.index);
console.log('Hash:', latestBlock.hash);
console.log('Transactions:', latestBlock.transactions.length);
console.log('Timestamp:', new Date(latestBlock.timestamp).toISOString());
await purechain.stop();
}
mineBlocks();
async function autoMining() {
const purechain = new PureChain();
await purechain.start();
let blocksMined = 0;
const minerAddress = 'autoMiner';
// Set up automatic mining every 10 seconds
const miningInterval = setInterval(async () => {
if (purechain.blockchain.pendingTransactions.length > 0) {
console.log(`Mining block #${blocksMined + 1}...`);
await purechain.blockchain.minePendingTransactions(minerAddress);
blocksMined++;
console.log(`Block mined! Total blocks: ${blocksMined}`);
}
}, 10000); // 10 seconds
// Simulate transactions
const users = ['alice', 'bob', 'charlie', 'david', 'eve'];
const txInterval = setInterval(() => {
const from = users[Math.floor(Math.random() * users.length)];
const to = users[Math.floor(Math.random() * users.length)];
if (from !== to) {
purechain.blockchain.createTransaction({
from,
to,
amount: Math.floor(Math.random() * 100) + 1,
timestamp: Date.now()
});
console.log(`Transaction: ${from} -> ${to}`);
}
}, 3000); // Every 3 seconds
// Run for 1 minute
setTimeout(async () => {
clearInterval(miningInterval);
clearInterval(txInterval);
console.log('\\nMining Summary:');
console.log('Total blocks mined:', blocksMined);
console.log('Miner balance:', purechain.blockchain.getBalance(minerAddress));
console.log('Chain valid:', purechain.blockchain.isChainValid());
await purechain.stop();
}, 60000);
}
autoMining();
async function checkBalance() {
const purechain = new PureChain();
await purechain.start();
// Create some transactions
purechain.blockchain.createTransaction({
from: 'genesis',
to: 'alice',
amount: 1000,
timestamp: Date.now()
});
purechain.blockchain.createTransaction({
from: 'genesis',
to: 'bob',
amount: 500,
timestamp: Date.now()
});
// Mine the transactions
await purechain.blockchain.minePendingTransactions('miner');
// Check balances
const aliceBalance = purechain.blockchain.getBalance('alice');
const bobBalance = purechain.blockchain.getBalance('bob');
const minerBalance = purechain.blockchain.getBalance('miner');
console.log('Balances:');
console.log('Alice:', aliceBalance);
console.log('Bob:', bobBalance);
console.log('Miner:', minerBalance);
await purechain.stop();
}
checkBalance();
async function balanceHistory() {
const purechain = new PureChain();
await purechain.start();
const address = 'alice';
const history = [];
// Transaction 1
purechain.blockchain.createTransaction({
from: 'genesis',
to: address,
amount: 1000,
timestamp: Date.now()
});
await purechain.blockchain.minePendingTransactions('miner');
history.push({
block: purechain.blockchain.chain.length - 1,
balance: purechain.blockchain.getBalance(address)
});
// Transaction 2
purechain.blockchain.createTransaction({
from: address,
to: 'bob',
amount: 300,
timestamp: Date.now()
});
await purechain.blockchain.minePendingTransactions('miner');
history.push({
block: purechain.blockchain.chain.length - 1,
balance: purechain.blockchain.getBalance(address)
});
// Transaction 3
purechain.blockchain.createTransaction({
from: 'charlie',
to: address,
amount: 150,
timestamp: Date.now()
});
await purechain.blockchain.minePendingTransactions('miner');
history.push({
block: purechain.blockchain.chain.length - 1,
balance: purechain.blockchain.getBalance(address)
});
console.log(`Balance history for ${address}:`);
history.forEach(entry => {
console.log(`Block #${entry.block}: ${entry.balance}`);
});
await purechain.stop();
}
balanceHistory();
async function multipleBalances() {
const purechain = new PureChain();
await purechain.start();
// Setup initial distribution
const initialDistribution = [
{ to: 'alice', amount: 1000 },
{ to: 'bob', amount: 750 },
{ to: 'charlie', amount: 500 },
{ to: 'david', amount: 250 },
{ to: 'eve', amount: 100 }
];
// Create distribution transactions
initialDistribution.forEach(dist => {
purechain.blockchain.createTransaction({
from: 'genesis',
to: dist.to,
amount: dist.amount,
timestamp: Date.now()
});
});
// Mine the distribution
await purechain.blockchain.minePendingTransactions('miner');
// Check all balances
const addresses = ['alice', 'bob', 'charlie', 'david', 'eve', 'miner'];
const balances = {};
addresses.forEach(addr => {
balances[addr] = purechain.blockchain.getBalance(addr);
});
// Display as table
console.log('\\nAccount Balances:');
console.log('==================');
Object.entries(balances).forEach(([addr, balance]) => {
console.log(`${addr.padEnd(10)} : ${balance}`);
});
// Calculate total supply
const totalSupply = Object.values(balances).reduce((sum, bal) => sum + bal, 0);
console.log('==================');
console.log(`Total : ${totalSupply}`);
await purechain.stop();
}
multipleBalances();
PureChain provides five pre-built contract types and support for custom contracts:
| Contract Type | Use Case | Key Features |
|---|---|---|
| TOKEN | Fungible tokens (like ERC-20) | Transfer, Approve, Mint, Burn |
| NFT | Non-fungible tokens | Mint, Transfer, Metadata, Collections |
| ESCROW | Secure payment holding | Create, Release, Refund, Dispute |
| VOTING | Governance and decisions | Proposals, Vote, Tally, Execute |
| STORAGE | On-chain data storage | Set, Get, Delete, Access Control |
| CUSTOM | User-defined logic | Fully customizable |
const { PureChain, ContractType } = require('purechainlib');
async function deployToken() {
const purechain = new PureChain();
await purechain.start();
// Token configuration
const tokenConfig = {
type: ContractType.TOKEN,
name: 'MyToken',
symbol: 'MTK',
initialSupply: 1000000,
decimals: 18,
metadata: {
description: 'My custom token on PureChain',
website: 'https://mytoken.com',
whitepaper: 'https://mytoken.com/whitepaper.pdf'
}
};
// Deploy the token (FREE - no gas cost!)
const deployerAddress = 'tokenDeployer';
const deployerBalance = 0; // No balance needed for gas!
const result = await purechain.contractEngine.deployContract(
tokenConfig,
deployerAddress,
deployerBalance
);
if (result.success) {
console.log('Token deployed successfully!');
console.log('Contract address:', result.contractAddress);
console.log('Deployment cost:', result.deploymentCost); // Always 0
console.log('Transaction ID:', result.transactionId);
// Store the contract for later use
const tokenContract = result.contract;
// Check initial supply
const totalSupply = tokenContract.execute('totalSupply', [], deployerAddress);
console.log('Total supply:', totalSupply.result);
const deployerTokenBalance = tokenContract.execute('balanceOf', [deployerAddress], 'anyone');
console.log('Deployer balance:', deployerTokenBalance.result);
} else {
console.log('Deployment failed:', result.error);
}
await purechain.stop();
}
deployToken();
async function tokenOperations() {
const purechain = new PureChain();
await purechain.start();
// Deploy token first
const result = await purechain.contractEngine.deployContract({
type: ContractType.TOKEN,
name: 'TestToken',
symbol: 'TEST',
initialSupply: 1000000,
decimals: 18
}, 'owner', 0);
if (result.success) {
const token = result.contract;
// 1. Transfer tokens
console.log('\\n--- Transfer Operation ---');
const transferResult = token.execute('transfer', ['alice', 1000], 'owner');
console.log('Transfer to Alice:', transferResult.success);
// 2. Check balance
const aliceBalance = token.execute('balanceOf', ['alice'], 'anyone');
console.log('Alice balance:', aliceBalance.result);
// 3. Approve spending
console.log('\\n--- Approval Operation ---');
const approveResult = token.execute('approve', ['bob', 500], 'alice');
console.log('Alice approved Bob:', approveResult.success);
// 4. Check allowance
const allowance = token.execute('allowance', ['alice', 'bob'], 'anyone');
console.log('Bob allowance from Alice:', allowance.result);
// 5. Transfer from (using allowance)
console.log('\\n--- TransferFrom Operation ---');
const transferFromResult = token.execute('transferFrom', ['alice', 'charlie', 200], 'bob');
console.log('Bob transferred from Alice to Charlie:', transferFromResult.success);
// 6. Mint new tokens (if mintable)
console.log('\\n--- Minting Operation ---');
const mintResult = token.execute('mint', ['david', 5000], 'owner');
console.log('Minted to David:', mintResult.success);
// 7. Burn tokens
console.log('\\n--- Burning Operation ---');
const burnResult = token.execute('burn', [100], 'alice');
console.log('Alice burned tokens:', burnResult.success);
// Final balances
console.log('\\n--- Final Balances ---');
const addresses = ['owner', 'alice', 'bob', 'charlie', 'david'];
addresses.forEach(addr => {
const bal = token.execute('balanceOf', [addr], 'anyone');
console.log(`${addr}: ${bal.result}`);
});
}
await purechain.stop();
}
tokenOperations();
async function advancedTokenFeatures() {
const purechain = new PureChain();
await purechain.start();
// Deploy token with advanced features
const result = await purechain.contractEngine.deployContract({
type: ContractType.TOKEN,
name: 'AdvancedToken',
symbol: 'ADV',
initialSupply: 10000000,
decimals: 18,
metadata: {
// Tokenomics
maxSupply: 100000000,
mintable: true,
burnable: true,
pausable: true,
// Vesting schedule
vestingEnabled: true,
vestingSchedule: [
{ recipient: 'team', amount: 1000000, releaseTime: Date.now() + 365 * 24 * 60 * 60 * 1000 },
{ recipient: 'advisors', amount: 500000, releaseTime: Date.now() + 180 * 24 * 60 * 60 * 1000 }
],
// Tax/Fee structure
transferFee: 0, // No fees on PureChain!
// Governance
governanceEnabled: true,
proposalThreshold: 100000,
votingPeriod: 7 * 24 * 60 * 60 * 1000 // 7 days
}
}, 'owner', 0);
if (result.success) {
const token = result.contract;
// Pause transfers
token.execute('pause', [], 'owner');
console.log('Token paused');
// Try transfer while paused (should fail)
const pausedTransfer = token.execute('transfer', ['alice', 100], 'owner');
console.log('Transfer while paused:', pausedTransfer.success); // false
// Unpause
token.execute('unpause', [], 'owner');
console.log('Token unpaused');
// Now transfer works
const unpausedTransfer = token.execute('transfer', ['alice', 100], 'owner');
console.log('Transfer after unpause:', unpausedTransfer.success); // true
// Check vesting
const vestingInfo = token.execute('getVestingInfo', ['team'], 'anyone');
console.log('Team vesting info:', vestingInfo.result);
// Create governance proposal
const proposal = token.execute('createProposal', [
'Increase max supply to 200M',
'INCREASE_MAX_SUPPLY',
200000000
], 'owner');
console.log('Proposal created:', proposal.result);
}
await purechain.stop();
}
advancedTokenFeatures();
async function deployNFTCollection() {
const purechain = new PureChain();
await purechain.start();
const nftConfig = {
type: ContractType.NFT,
name: 'CryptoArt Collection',
metadata: {
description: 'Unique digital art on PureChain',
maxSupply: 10000,
baseURI: 'https://api.cryptoart.com/metadata/',
royaltyPercentage: 5, // 5% royalty on secondary sales
artist: 'artistAddress',
// Collection traits
traits: [
{ name: 'Background', options: ['Blue', 'Red', 'Green', 'Purple'] },
{ name: 'Style', options: ['Abstract', 'Realistic', 'Surreal'] },
{ name: 'Rarity', options: ['Common', 'Rare', 'Epic', 'Legendary'] }
]
}
};
const result = await purechain.contractEngine.deployContract(
nftConfig,
'artistAddress',
0
);
if (result.success) {
console.log('NFT Collection deployed:', result.contractAddress);
console.log('Gas cost:', result.deploymentCost); // 0
}
await purechain.stop();
}
deployNFTCollection();
async function mintNFTs() {
const purechain = new PureChain();
await purechain.start();
// Deploy NFT collection
const result = await purechain.contractEngine.deployContract({
type: ContractType.NFT,
name: 'Digital Collectibles'
}, 'creator', 0);
if (result.success) {
const nftContract = result.contract;
// Mint single NFT
const mintResult = nftContract.execute('mintNFT', [
'collector1', // recipient
{
tokenId: 1,
name: 'Genesis #1',
description: 'The first NFT in the collection',
image: 'ipfs://QmXxx...',
attributes: [
{ trait_type: 'Generation', value: 1 },
{ trait_type: 'Rarity', value: 'Legendary' },
{ trait_type: 'Power', value: 100 }
],
animation_url: 'ipfs://QmYyy...',
external_url: 'https://collection.com/token/1'
}
], 'creator');
console.log('NFT #1 minted:', mintResult.success);
// Batch mint NFTs
console.log('\\nBatch minting NFTs...');
for (let i = 2; i <= 10; i++) {
const batchMint = nftContract.execute('mintNFT', [
'collector2',
{
tokenId: i,
name: `Collectible #${i}`,
description: `NFT number ${i} in the series`,
image: `ipfs://Qm${i}...`,
attributes: [
{ trait_type: 'Generation', value: 1 },
{ trait_type: 'Number', value: i },
{ trait_type: 'Rarity', value: i <= 3 ? 'Rare' : 'Common' }
]
}
], 'creator');
console.log(`NFT #${i} minted:`, batchMint.success);
}
// Check ownership
const owner1 = nftContract.execute('ownerOf', [1], 'anyone');
console.log('\\nOwner of NFT #1:', owner1.result);
const balance = nftContract.execute('balanceOf', ['collector2'], 'anyone');
console.log('Collector2 owns:', balance.result, 'NFTs');
// Get NFT metadata
const metadata = nftContract.execute('tokenURI', [1], 'anyone');
console.log('\\nNFT #1 metadata:', metadata.result);
}
await purechain.stop();
}
mintNFTs();
async function nftMarketplace() {
const purechain = new PureChain();
await purechain.start();
// Deploy NFT and marketplace contracts
const nftResult = await purechain.contractEngine.deployContract({
type: ContractType.NFT,
name: 'Marketplace NFTs'
}, 'marketplace', 0);
if (nftResult.success) {
const nft = nftResult.contract;
// Mint NFTs to different users
nft.execute('mintNFT', ['seller1', { tokenId: 1, name: 'Art #1' }], 'marketplace');
nft.execute('mintNFT', ['seller2', { tokenId: 2, name: 'Art #2' }], 'marketplace');
// List NFT for sale
console.log('\\n--- Listing NFTs ---');
const listing1 = nft.execute('listForSale', [1, 1000], 'seller1');
console.log('NFT #1 listed for 1000:', listing1.success);
const listing2 = nft.execute('listForSale', [2, 1500], 'seller2');
console.log('NFT #2 listed for 1500:', listing2.success);
// View listings
const listings = nft.execute('getListings', [], 'anyone');
console.log('\\nActive listings:', listings.result);
// Buy NFT (transfer happens automatically, no gas!)
console.log('\\n--- Purchasing NFT ---');
const purchase = nft.execute('buyNFT', [1], 'buyer1');
console.log('NFT #1 purchased:', purchase.success);
// Check new ownership
const newOwner = nft.execute('ownerOf', [1], 'anyone');
console.log('New owner of NFT #1:', newOwner.result);
// Transfer NFT
console.log('\\n--- Transfer NFT ---');
const transfer = nft.execute('transferFrom', ['buyer1', 'collector', 1], 'buyer1');
console.log('NFT transferred:', transfer.success);
// Approve another user to transfer
console.log('\\n--- Approval ---');
const approve = nft.execute('approve', ['agent', 2], 'seller2');
console.log('Agent approved for NFT #2:', approve.success);
// Agent transfers on behalf
const agentTransfer = nft.execute('transferFrom', ['seller2', 'finalOwner', 2], 'agent');
console.log('Agent transferred NFT #2:', agentTransfer.success);
}
await purechain.stop();
}
nftMarketplace();
async function createEscrow() {
const purechain = new PureChain();
await purechain.start();
// Deploy escrow contract
const result = await purechain.contractEngine.deployContract({
type: ContractType.ESCROW,
name: 'Secure Escrow Service',
metadata: {
description: 'Trustless escrow on PureChain',
arbitrator: 'arbitratorAddress',
fee: 0, // No fees on PureChain!
disputeWindow: 3 * 24 * 60 * 60 * 1000 // 3 days
}
}, 'escrowService', 0);
if (result.success) {
const escrow = result.contract;
// Create an escrow agreement
const createResult = escrow.execute('createEscrow', [
'buyer123', // buyer
'seller456', // seller
5000, // amount
Date.now() + 7 * 24 * 60 * 60 * 1000, // deadline (7 days)
'Purchase of digital goods' // description
], 'escrowService');
console.log('Escrow created:', createResult.success);
console.log('Escrow ID:', createResult.result);
const escrowId = createResult.result;
// Check escrow details
const details = escrow.execute('getEscrowDetails', [escrowId], 'anyone');
console.log('\\nEscrow Details:');
console.log('Buyer:', details.result.buyer);
console.log('Seller:', details.result.seller);
console.log('Amount:', details.result.amount);
console.log('Status:', details.result.status);
console.log('Deadline:', new Date(details.result.deadline).toISOString());
}
await purechain.stop();
}
createEscrow();
async function escrowWorkflow() {
const purechain = new PureChain();
await purechain.start();
// Deploy escrow
const result = await purechain.contractEngine.deployContract({
type: ContractType.ESCROW,
name: 'Escrow Platform'
}, 'platform', 0);
if (result.success) {
const escrow = result.contract;
// Step 1: Create escrow
console.log('Step 1: Creating escrow...');
const create = escrow.execute('createEscrow', [
'buyer',
'seller',
1000,
Date.now() + 86400000,
'Service payment'
], 'platform');
const escrowId = create.result;
console.log('Escrow ID:', escrowId);
// Step 2: Buyer deposits funds (in real implementation)
console.log('\\nStep 2: Buyer depositing funds...');
const deposit = escrow.execute('deposit', [escrowId, 1000], 'buyer');
console.log('Deposit successful:', deposit.success);
// Step 3: Seller delivers service/product
console.log('\\nStep 3: Seller marking as delivered...');
const deliver = escrow.execute('markDelivered', [escrowId], 'seller');
console.log('Marked as delivered:', deliver.success);
// Step 4: Buyer confirms receipt
console.log('\\nStep 4: Buyer confirming receipt...');
const confirm = escrow.execute('confirmReceipt', [escrowId], 'buyer');
console.log('Receipt confirmed:', confirm.success);
// Step 5: Funds released to seller
console.log('\\nStep 5: Releasing funds...');
const release = escrow.execute('releaseFunds', [escrowId], 'platform');
console.log('Funds released:', release.success);
// Check final status
const finalStatus = escrow.execute('getEscrowDetails', [escrowId], 'anyone');
console.log('\\nFinal status:', finalStatus.result.status);
console.log('Transaction completed with 0 gas fees!');
}
await purechain.stop();
}
escrowWorkflow();
async function escrowDispute() {
const purechain = new PureChain();
await purechain.start();
const result = await purechain.contractEngine.deployContract({
type: ContractType.ESCROW,
name: 'Dispute Resolution'
}, 'arbitrator', 0);
if (result.success) {
const escrow = result.contract;
// Create escrow
const create = escrow.execute('createEscrow', [
'buyer',
'seller',
2000,
Date.now() + 86400000,
'Disputed transaction'
], 'arbitrator');
const escrowId = create.result;
// Simulate dispute scenario
console.log('Creating dispute scenario...');
// Buyer deposits
escrow.execute('deposit', [escrowId, 2000], 'buyer');
// Seller claims delivery
escrow.execute('markDelivered', [escrowId], 'seller');
// Buyer raises dispute instead of confirming
console.log('\\nBuyer raising dispute...');
const dispute = escrow.execute('raiseDispute', [
escrowId,
'Product not as described'
], 'buyer');
console.log('Dispute raised:', dispute.success);
// Seller responds to dispute
console.log('\\nSeller responding to dispute...');
const response = escrow.execute('respondToDispute', [
escrowId,
'Product was delivered as agreed'
], 'seller');
console.log('Response submitted:', response.success);
// Arbitrator reviews and decides
console.log('\\nArbitrator making decision...');
// Option 1: Rule in favor of buyer (refund)
const refund = escrow.execute('resolveDispute', [
escrowId,
'REFUND',
'Evidence supports buyer claim'
], 'arbitrator');
console.log('Dispute resolved with refund:', refund.success);
// Option 2: Rule in favor of seller (release)
// const release = escrow.execute('resolveDispute', [
// escrowId,
// 'RELEASE',
// 'Seller fulfilled obligations'
// ], 'arbitrator');
// Option 3: Split decision
// const split = escrow.execute('resolveDispute', [
// escrowId,
// 'SPLIT',
// 'Partial fulfillment',
// { buyerAmount: 1000, sellerAmount: 1000 }
// ], 'arbitrator');
// Check final status
const status = escrow.execute('getEscrowDetails', [escrowId], 'anyone');
console.log('\\nFinal escrow status:', status.result.status);
console.log('Resolution:', status.result.resolution);
}
await purechain.stop();
}
escrowDispute();
async function createVotingProposal() {
const purechain = new PureChain();
await purechain.start();
// Deploy voting contract
const result = await purechain.contractEngine.deployContract({
type: ContractType.VOTING,
name: 'DAO Governance',
metadata: {
description: 'Decentralized governance system',
quorum: 100, // Minimum votes needed
votingPeriod: 7 * 24 * 60 * 60 * 1000, // 7 days
proposalThreshold: 10, // Min tokens to create proposal
voteWeight: 'TOKEN_BASED' // or 'ONE_PERSON_ONE_VOTE'
}
}, 'daoAdmin', 0);
if (result.success) {
const voting = result.contract;
// Create proposal
const proposal = voting.execute('createProposal', [
'Should we implement feature X?',
'This proposal suggests implementing feature X which will improve...',
['Yes', 'No', 'Abstain'], // Options
Date.now() + 7 * 24 * 60 * 60 * 1000 // End time
], 'proposer');
console.log('Proposal created!');
console.log('Proposal ID:', proposal.result);
// Get proposal details
const details = voting.execute('getProposal', [proposal.result], 'anyone');
console.log('\\nProposal Details:');
console.log('Title:', details.result.title);
console.log('Options:', details.result.options);
console.log('End time:', new Date(details.result.endTime).toISOString());
console.log('Status:', details.result.status);
}
await purechain.stop();
}
createVotingProposal();
async function votingProcess() {
const purechain = new PureChain();
await purechain.start();
// Deploy voting contract
const result = await purechain.contractEngine.deployContract({
type: ContractType.VOTING,
name: 'Community Voting'
}, 'admin', 0);
if (result.success) {
const voting = result.contract;
// Create multiple proposals
console.log('Creating proposals...');
const proposal1 = voting.execute('createProposal', [
'Increase rewards by 20%?',
'Should we increase staking rewards?',
['Yes', 'No'],
Date.now() + 3600000 // 1 hour
], 'admin');
const proposal2 = voting.execute('createProposal', [
'Add new feature?',
'Should we add feature Y?',
['Strongly Agree', 'Agree', 'Neutral', 'Disagree', 'Strongly Disagree'],
Date.now() + 7200000 // 2 hours
], 'admin');
console.log('Proposal 1 ID:', proposal1.result);
console.log('Proposal 2 ID:', proposal2.result);
// Simulate voting
console.log('\\nSimulating votes...');
const voters = ['alice', 'bob', 'charlie', 'david', 'eve'];
// Vote on proposal 1
voters.forEach((voter, index) => {
const vote = voting.execute('vote', [
proposal1.result,
index % 2 === 0 ? 0 : 1 // Alternate Yes/No
], voter);
console.log(`${voter} voted:`, vote.success);
});
// Vote on proposal 2
voters.forEach((voter, index) => {
const vote = voting.execute('vote', [
proposal2.result,
index // Different option for each
], voter);
console.log(`${voter} voted on P2:`, vote.success);
});
// Check current results
console.log('\\nCurrent Results:');
const results1 = voting.execute('getResults', [proposal1.result], 'anyone');
console.log('Proposal 1 results:', results1.result);
const results2 = voting.execute('getResults', [proposal2.result], 'anyone');
console.log('Proposal 2 results:', results2.result);
// Check if user has voted
const hasVoted = voting.execute('hasVoted', [proposal1.result, 'alice'], 'anyone');
console.log('\\nAlice has voted on P1:', hasVoted.result);
// Get all active proposals
const activeProposals = voting.execute('getActiveProposals', [], 'anyone');
console.log('\\nActive proposals:', activeProposals.result.length);
}
await purechain.stop();
}
votingProcess();
async function keyValueStorage() {
const purechain = new PureChain();
await purechain.start();
// Deploy storage contract
const result = await purechain.contractEngine.deployContract({
type: ContractType.STORAGE,
name: 'Data Vault',
metadata: {
description: 'Decentralized storage on PureChain',
maxSize: 1000000, // Max storage size in bytes
accessControl: true,
encryption: false // Handle encryption client-side
}
}, 'storageOwner', 0);
if (result.success) {
const storage = result.contract;
// Store different data types
console.log('Storing data...');
// String data
storage.execute('set', ['username', 'alice123'], 'user1');
// Number data
storage.execute('set', ['score', 9500], 'user1');
// Object data
storage.execute('set', ['profile', {
name: 'Alice',
age: 28,
email: 'alice@example.com',
preferences: {
theme: 'dark',
notifications: true
}
}], 'user1');
// Array data
storage.execute('set', ['achievements', [
'First Login',
'Profile Complete',
'100 Transactions'
]], 'user1');
// Retrieve data
console.log('\\nRetrieving data...');
const username = storage.execute('get', ['username'], 'anyone');
console.log('Username:', username.result);
const profile = storage.execute('get', ['profile'], 'anyone');
console.log('Profile:', profile.result);
const achievements = storage.execute('get', ['achievements'], 'anyone');
console.log('Achievements:', achievements.result);
// Update data
console.log('\\nUpdating data...');
storage.execute('set', ['score', 10000], 'user1');
const newScore = storage.execute('get', ['score'], 'anyone');
console.log('Updated score:', newScore.result);
// Delete data
console.log('\\nDeleting data...');
storage.execute('delete', ['username'], 'user1');
const deleted = storage.execute('get', ['username'], 'anyone');
console.log('After deletion:', deleted.result); // null or undefined
// List all keys
const keys = storage.execute('listKeys', [], 'user1');
console.log('\\nAll keys:', keys.result);
}
await purechain.stop();
}
keyValueStorage();
async function storageAccessControl() {
const purechain = new PureChain();
await purechain.start();
const result = await purechain.contractEngine.deployContract({
type: ContractType.STORAGE,
name: 'Private Storage'
}, 'admin', 0);
if (result.success) {
const storage = result.contract;
// Set private data
console.log('Setting private data...');
storage.execute('setPrivate', ['secret', 'my-secret-data'], 'owner');
// Try to read as different user (should fail)
const unauthorized = storage.execute('get', ['secret'], 'hacker');
console.log('Unauthorized access:', unauthorized.success); // false
// Grant access to specific user
console.log('\\nGranting access...');
storage.execute('grantAccess', ['secret', 'trustedUser'], 'owner');
// Now trusted user can read
const authorized = storage.execute('get', ['secret'], 'trustedUser');
console.log('Authorized access:', authorized.result);
// Revoke access
console.log('\\nRevoking access...');
storage.execute('revokeAccess', ['secret', 'trustedUser'], 'owner');
// Access revoked
const revoked = storage.execute('get', ['secret'], 'trustedUser');
console.log('After revocation:', revoked.success); // false
// Set public data
console.log('\\nSetting public data...');
storage.execute('setPublic', ['announcement', 'Hello World!'], 'owner');
// Anyone can read public data
const publicData = storage.execute('get', ['announcement'], 'anyone');
console.log('Public data:', publicData.result);
}
await purechain.stop();
}
storageAccessControl();
async function customContract() {
const purechain = new PureChain();
await purechain.start();
// Define custom contract
const customConfig = {
type: ContractType.CUSTOM,
name: 'GameContract',
metadata: {
description: 'Custom game logic contract',
version: '1.0.0'
},
customMethods: {
// Initialize game
initGame: (params, state, caller) => {
const [gameName, maxPlayers] = params;
state.games = state.games || {};
state.games[gameName] = {
creator: caller,
maxPlayers,
players: [],
status: 'WAITING',
createdAt: Date.now()
};
return { success: true, gameId: gameName };
},
// Join game
joinGame: (params, state, caller) => {
const [gameId] = params;
const game = state.games?.[gameId];
if (!game) return { success: false, error: 'Game not found' };
if (game.players.includes(caller)) return { success: false, error: 'Already joined' };
if (game.players.length >= game.maxPlayers) return { success: false, error: 'Game full' };
game.players.push(caller);
if (game.players.length === game.maxPlayers) {
game.status = 'IN_PROGRESS';
}
return { success: true, players: game.players.length };
},
// Make move
makeMove: (params, state, caller) => {
const [gameId, move] = params;
const game = state.games?.[gameId];
if (!game) return { success: false, error: 'Game not found' };
if (!game.players.includes(caller)) return { success: false, error: 'Not a player' };
if (game.status !== 'IN_PROGRESS') return { success: false, error: 'Game not active' };
state.moves = state.moves || {};
state.moves[gameId] = state.moves[gameId] || [];
state.moves[gameId].push({
player: caller,
move,
timestamp: Date.now()
});
return { success: true, moveCount: state.moves[gameId].length };
},
// End game
endGame: (params, state, caller) => {
const [gameId, winner] = params;
const game = state.games?.[gameId];
if (!game) return { success: false, error: 'Game not found' };
if (game.creator !== caller) return { success: false, error: 'Only creator can end' };
game.status = 'COMPLETED';
game.winner = winner;
game.endedAt = Date.now();
return { success: true, winner };
},
// Get game status
getGameStatus: (params, state) => {
const [gameId] = params;
return state.games?.[gameId] || null;
},
// List active games
listActiveGames: (params, state) => {
const games = state.games || {};
return Object.entries(games)
.filter(([_, game]) => game.status === 'WAITING' || game.status === 'IN_PROGRESS')
.map(([id, game]) => ({
id,
players: game.players.length,
maxPlayers: game.maxPlayers,
status: game.status
}));
}
}
};
// Deploy custom contract
const result = await purechain.contractEngine.deployContract(
customConfig,
'gameOwner',
0
);
if (result.success) {
const game = result.contract;
// Create a game
console.log('Creating game...');
const create = game.execute('initGame', ['Chess Match 1', 2], 'alice');
console.log('Game created:', create.result);
// Players join
console.log('\\nPlayers joining...');
game.execute('joinGame', ['Chess Match 1'], 'alice');
game.execute('joinGame', ['Chess Match 1'], 'bob');
// Make moves
console.log('\\nMaking moves...');
game.execute('makeMove', ['Chess Match 1', 'e2-e4'], 'alice');
game.execute('makeMove', ['Chess Match 1', 'e7-e5'], 'bob');
// Check status
const status = game.execute('getGameStatus', ['Chess Match 1'], 'anyone');
console.log('\\nGame status:', status.result);
// End game
game.execute('endGame', ['Chess Match 1', 'alice'], 'alice');
console.log('\\nGame ended!');
// List games
const activeGames = game.execute('listActiveGames', [], 'anyone');
console.log('Active games:', activeGames.result);
}
await purechain.stop();
}
customContract();
| Network | Chain ID | RPC URL | Status |
|---|---|---|---|
| Testnet | 900520900520 | https://purechainnode.com:8547 | Active |
| Mainnet | 900520900520 | Coming Soon | Not Launched |
| Local | 1337 | http://localhost:8545 | Development |
const { PureChain } = require('purechainlib');
// Testnet (default)
const testnet = new PureChain();
// Explicit testnet
const testnetExplicit = new PureChain({
networkConfig: 'testnet'
});
// Local development
const local = new PureChain({
networkConfig: 'local'
});
// Mainnet (when available)
const mainnet = new PureChain({
networkConfig: 'mainnet'
});
const customNetwork = new PureChain({
networkConfig: {
name: 'Custom PureChain Network',
chainId: 999999,
rpcUrl: 'https://custom.purechain.com:8547',
explorerUrl: 'https://explorer.custom.purechain.com/api/v1',
nativeCurrency: {
name: 'Custom Token',
symbol: 'CTK',
decimals: 18
},
isTestnet: true,
blockTime: 5000, // 5 seconds
consensus: 'PoS'
}
});
await customNetwork.start();
console.log('Connected to:', customNetwork.networkConfig.name);
async function networkSwitching() {
const purechain = new PureChain();
// Start with testnet
await purechain.start();
console.log('Initial network:', purechain.networkConfig.name);
// Switch to local
await purechain.switchNetwork('local');
console.log('Switched to:', purechain.networkConfig.name);
// Switch to custom network
await purechain.switchNetwork({
name: 'Private Network',
chainId: 12345,
rpcUrl: 'http://192.168.1.100:8545',
explorerUrl: null,
nativeCurrency: {
name: 'Private Token',
symbol: 'PVT',
decimals: 18
},
isTestnet: false
});
console.log('Switched to:', purechain.networkConfig.name);
await purechain.stop();
}
networkSwitching();
async function queryTransactions() {
const purechain = new PureChain();
await purechain.start();
// Get transaction by hash
const txHash = '0x9734d1e5...';
const tx = await purechain.explorer.getTransaction(txHash);
if (tx.success) {
console.log('Transaction Details:');
console.log('From:', tx.data.from);
console.log('To:', tx.data.to);
console.log('Amount:', tx.data.amount);
console.log('Status:', tx.data.status);
console.log('Block:', tx.data.blockNumber);
console.log('Gas Cost:', 0); // Always 0 on PureChain
}
// Get transaction receipt
const receipt = await purechain.explorer.getTransactionReceipt(txHash);
console.log('Receipt:', receipt.data);
// Get printable receipt
const htmlReceipt = await purechain.explorer.getPrintableReceipt(txHash);
// Can be saved as HTML file for printing
await purechain.stop();
}
queryTransactions();
async function exploreBlocks() {
const purechain = new PureChain();
await purechain.start();
// Get latest block
const latest = await purechain.explorer.getLatestBlock();
console.log('Latest Block:', latest.data.number);
// Get specific block
const blockNumber = 12345;
const block = await purechain.explorer.getBlock(blockNumber);
if (block.success) {
console.log('Block Details:');
console.log('Number:', block.data.number);
console.log('Hash:', block.data.hash);
console.log('Transactions:', block.data.transactions.length);
console.log('Timestamp:', new Date(block.data.timestamp).toISOString());
console.log('Miner:', block.data.miner);
}
await purechain.stop();
}
exploreBlocks();
async function accountInfo() {
const purechain = new PureChain();
await purechain.start();
const address = '0x44A393FA...';
const account = await purechain.explorer.getAccount(address);
if (account.success) {
console.log('Account Information:');
console.log('Address:', address);
console.log('Balance:', account.data.balance);
console.log('Transaction Count:', account.data.transactionCount);
console.log('Contract:', account.data.isContract);
// Get transaction history
if (account.data.transactions) {
console.log('\\nRecent Transactions:');
account.data.transactions.slice(0, 5).forEach(tx => {
console.log(`- ${tx.hash}: ${tx.from} -> ${tx.to} (${tx.amount})`);
});
}
}
await purechain.stop();
}
accountInfo();
const { PureChain } = require('purechainlib');
const express = require('express');
async function setupAPI() {
const purechain = new PureChain({
api: {
port: 3000,
cors: true,
rateLimit: {
windowMs: 15 * 60 * 1000,
max: 100
}
}
});
await purechain.start();
// API is now running on port 3000
console.log('API running on http://localhost:3000');
// Available endpoints:
// GET /api/v1/blocks
// GET /api/v1/blocks/latest
// GET /api/v1/blocks/:number
// POST /api/v1/transactions
// GET /api/v1/transactions/:hash
// GET /api/v1/balance/:address
// GET /api/v1/contracts
// POST /api/v1/contracts/deploy
// POST /api/v1/contracts/:address/execute
}
setupAPI();
async function customEndpoints() {
const purechain = new PureChain();
await purechain.start();
// Access the Express app
const app = purechain.api.app;
// Add custom endpoints
app.get('/api/v1/stats', (req, res) => {
const stats = {
chainLength: purechain.blockchain.chain.length,
pendingTransactions: purechain.blockchain.pendingTransactions.length,
totalContracts: purechain.contractEngine.getAllContracts().length,
gasCost: 0,
networkName: purechain.networkConfig.name
};
res.json(stats);
});
app.get('/api/v1/richlist', (req, res) => {
// Get all unique addresses and their balances
const addresses = new Set();
purechain.blockchain.chain.forEach(block => {
block.transactions.forEach(tx => {
addresses.add(tx.from);
addresses.add(tx.to);
});
});
const balances = Array.from(addresses)
.map(addr => ({
address: addr,
balance: purechain.blockchain.getBalance(addr)
}))
.sort((a, b) => b.balance - a.balance)
.slice(0, 10);
res.json(balances);
});
console.log('Custom endpoints added');
}
customEndpoints();
const WebSocket = require('ws');
async function websocketEvents() {
const purechain = new PureChain();
await purechain.start();
// Connect to WebSocket
const ws = new WebSocket('ws://localhost:3000');
ws.on('open', () => {
console.log('WebSocket connected');
// Subscribe to events
ws.send(JSON.stringify({
type: 'subscribe',
events: ['newBlock', 'newTransaction', 'contractDeployed']
}));
});
ws.on('message', (data) => {
const message = JSON.parse(data);
switch(message.type) {
case 'newBlock':
console.log('New block mined:', message.data.index);
break;
case 'newTransaction':
console.log('New transaction:', message.data.id);
break;
case 'contractDeployed':
console.log('Contract deployed:', message.data.address);
break;
}
});
// Simulate activity
setTimeout(() => {
purechain.blockchain.createTransaction({
from: 'alice',
to: 'bob',
amount: 100,
timestamp: Date.now()
});
}, 2000);
setTimeout(async () => {
await purechain.blockchain.minePendingTransactions('miner');
}, 5000);
}
websocketEvents();
async function advancedAPI() {
const purechain = new PureChain();
await purechain.start();
const app = purechain.api.app;
// Token faucet endpoint
app.post('/api/v1/faucet', async (req, res) => {
const { address } = req.body;
if (!address) {
return res.status(400).json({ error: 'Address required' });
}
// Create faucet transaction
purechain.blockchain.createTransaction({
from: 'faucet',
to: address,
amount: 100,
timestamp: Date.now()
});
// Mine immediately
await purechain.blockchain.minePendingTransactions('faucet');
const balance = purechain.blockchain.getBalance(address);
res.json({
success: true,
amount: 100,
newBalance: balance,
gasCost: 0
});
});
// Batch transaction endpoint
app.post('/api/v1/batch-transfer', async (req, res) => {
const { transfers } = req.body;
if (!Array.isArray(transfers)) {
return res.status(400).json({ error: 'Transfers array required' });
}
const results = [];
transfers.forEach(transfer => {
purechain.blockchain.createTransaction({
from: transfer.from,
to: transfer.to,
amount: transfer.amount,
timestamp: Date.now()
});
results.push({
from: transfer.from,
to: transfer.to,
amount: transfer.amount,
status: 'pending'
});
});
// Mine all transactions
await purechain.blockchain.minePendingTransactions('batcher');
res.json({
success: true,
transactions: results.length,
totalGasCost: 0,
results
});
});
// Smart contract interaction endpoint
app.post('/api/v1/contract-call', async (req, res) => {
const { contractAddress, method, params, caller } = req.body;
const contract = purechain.contractEngine.getContract(contractAddress);
if (!contract) {
return res.status(404).json({ error: 'Contract not found' });
}
const result = contract.execute(method, params, caller);
res.json({
success: result.success,
result: result.result,
gasCost: 0,
error: result.error
});
});
console.log('Advanced API endpoints configured');
}
advancedAPI();
const { PureChain, ConsensusType } = require('purechainlib');
async function proofOfWork() {
const purechain = new PureChain({
blockchain: {
consensus: ConsensusType.POW,
difficulty: 4, // Number of leading zeros required
miningReward: 100
}
});
await purechain.start();
// Mining with PoW
console.log('Mining with Proof of Work...');
console.time('Mining time');
await purechain.blockchain.minePendingTransactions('miner');
console.timeEnd('Mining time');
const latestBlock = purechain.blockchain.getLatestBlock();
console.log('Block hash:', latestBlock.hash);
console.log('Nonce:', latestBlock.nonce);
console.log('Difficulty:', purechain.blockchain.difficulty);
await purechain.stop();
}
proofOfWork();
async function proofOfStake() {
const purechain = new PureChain({
blockchain: {
consensus: ConsensusType.POS,
minStake: 1000
}
});
await purechain.start();
// Register validators
const validators = [
{ address: 'validator1', stake: 5000 },
{ address: 'validator2', stake: 3000 },
{ address: 'validator3', stake: 2000 }
];
validators.forEach(v => {
purechain.blockchain.consensus.addValidator(v.address, v.stake);
});
// Select validator based on stake
const selectedValidator = purechain.blockchain.consensus.selectValidator();
console.log('Selected validator:', selectedValidator);
// Mine block with selected validator
await purechain.blockchain.minePendingTransactions(selectedValidator);
console.log('Block mined by:', selectedValidator);
console.log('Validator reward:', purechain.blockchain.getBalance(selectedValidator));
await purechain.stop();
}
proofOfStake();
async function p2pNetwork() {
const purechain = new PureChain({
network: {
port: 6001,
peers: [
'ws://localhost:6002',
'ws://localhost:6003'
]
}
});
await purechain.start();
// Add new peer
purechain.network.addPeer('ws://localhost:6004');
// Broadcast transaction to peers
const tx = {
from: 'alice',
to: 'bob',
amount: 100,
timestamp: Date.now()
};
purechain.network.broadcastTransaction(tx);
// Handle incoming messages
purechain.network.on('transaction', (tx) => {
console.log('Received transaction from peer:', tx);
});
purechain.network.on('block', (block) => {
console.log('Received block from peer:', block);
});
// Get connected peers
const peers = purechain.network.getPeers();
console.log('Connected peers:', peers.length);
await purechain.stop();
}
p2pNetwork();
async function databaseStorage() {
const purechain = new PureChain({
storage: {
type: 'persistent',
path: './blockchain-data'
}
});
await purechain.start();
// Save blockchain to database
await purechain.database.saveBlockchain(purechain.blockchain);
console.log('Blockchain saved to database');
// Load blockchain from database
const loadedBlockchain = await purechain.database.loadBlockchain();
console.log('Loaded chain length:', loadedBlockchain.chain.length);
// Save contracts
const contracts = purechain.contractEngine.getAllContracts();
await purechain.database.saveContracts(contracts);
// Query specific data
const block = await purechain.database.getBlock(5);
const tx = await purechain.database.getTransaction('txHash');
await purechain.stop();
}
databaseStorage();
const { PureChain, ContractType } = require('purechainlib');
async function buildCompleteDApp() {
console.log('Building Complete DApp on PureChain...');
console.log('=====================================\\n');
const purechain = new PureChain();
await purechain.start();
// Step 1: Deploy Core Contracts
console.log('Step 1: Deploying Core Contracts');
console.log('---------------------------------');
// Deploy governance token
const tokenResult = await purechain.contractEngine.deployContract({
type: ContractType.TOKEN,
name: 'DAppToken',
symbol: 'DAPP',
initialSupply: 100000000,
decimals: 18,
metadata: {
description: 'Governance token for our DApp',
mintable: true,
burnable: true
}
}, 'dappFoundation', 0);
console.log('✓ Token deployed:', tokenResult.contractAddress);
// Deploy voting contract
const votingResult = await purechain.contractEngine.deployContract({
type: ContractType.VOTING,
name: 'DAppGovernance',
metadata: {
quorum: 1000,
votingPeriod: 7 * 24 * 60 * 60 * 1000
}
}, 'dappFoundation', 0);
console.log('✓ Voting deployed:', votingResult.contractAddress);
// Deploy NFT rewards
const nftResult = await purechain.contractEngine.deployContract({
type: ContractType.NFT,
name: 'DAppRewards',
metadata: {
description: 'Achievement NFTs for active users'
}
}, 'dappFoundation', 0);
console.log('✓ NFT Rewards deployed:', nftResult.contractAddress);
// Deploy storage for user data
const storageResult = await purechain.contractEngine.deployContract({
type: ContractType.STORAGE,
name: 'UserProfiles'
}, 'dappFoundation', 0);
console.log('✓ Storage deployed:', storageResult.contractAddress);
// Step 2: Initialize DApp
console.log('\\nStep 2: Initializing DApp');
console.log('-------------------------');
const token = tokenResult.contract;
const voting = votingResult.contract;
const nft = nftResult.contract;
const storage = storageResult.contract;
// Distribute tokens to initial users
const initialUsers = [
{ address: 'alice', amount: 10000, role: 'developer' },
{ address: 'bob', amount: 5000, role: 'designer' },
{ address: 'charlie', amount: 5000, role: 'marketer' },
{ address: 'david', amount: 2000, role: 'tester' },
{ address: 'eve', amount: 2000, role: 'community' }
];
initialUsers.forEach(user => {
token.execute('transfer', [user.address, user.amount], 'dappFoundation');
storage.execute('set', [`profile_${user.address}`, {
address: user.address,
role: user.role,
joinedAt: Date.now(),
reputation: 0
}], 'dappFoundation');
console.log(`✓ ${user.address}: ${user.amount} tokens, role: ${user.role}`);
});
// Step 3: Create First Proposal
console.log('\\nStep 3: Creating Governance Proposal');
console.log('------------------------------------');
const proposalResult = voting.execute('createProposal', [
'Should we add staking features?',
'Proposal to add staking mechanism to earn rewards',
['Yes', 'No', 'Abstain'],
Date.now() + 24 * 60 * 60 * 1000 // 24 hours
], 'alice');
const proposalId = proposalResult.result;
console.log('✓ Proposal created:', proposalId);
// Step 4: Voting Process
console.log('\\nStep 4: Voting on Proposal');
console.log('--------------------------');
voting.execute('vote', [proposalId, 0], 'alice'); // Yes
voting.execute('vote', [proposalId, 0], 'bob'); // Yes
voting.execute('vote', [proposalId, 1], 'charlie'); // No
voting.execute('vote', [proposalId, 0], 'david'); // Yes
voting.execute('vote', [proposalId, 2], 'eve'); // Abstain
const results = voting.execute('getResults', [proposalId], 'anyone');
console.log('Voting results:', results.result);
// Step 5: Reward Active Participants
console.log('\\nStep 5: Distributing NFT Rewards');
console.log('--------------------------------');
const voters = ['alice', 'bob', 'charlie', 'david', 'eve'];
voters.forEach((voter, index) => {
nft.execute('mintNFT', [
voter,
{
tokenId: index + 1,
name: `Governance Badge #${index + 1}`,
description: 'Awarded for participating in governance',
image: `ipfs://badge${index + 1}`,
attributes: [
{ trait_type: 'Type', value: 'Governance' },
{ trait_type: 'Proposal', value: proposalId },
{ trait_type: 'Date', value: new Date().toISOString() }
]
}
], 'dappFoundation');
console.log(`✓ NFT badge awarded to ${voter}`);
});
// Step 6: Update User Reputation
console.log('\\nStep 6: Updating User Reputation');
console.log('--------------------------------');
voters.forEach(voter => {
const profile = storage.execute('get', [`profile_${voter}`], 'anyone').result;
profile.reputation += 10;
profile.participationCount = (profile.participationCount || 0) + 1;
storage.execute('set', [`profile_${voter}`, profile], 'dappFoundation');
console.log(`✓ ${voter} reputation: ${profile.reputation}`);
});
// Step 7: DApp Statistics
console.log('\\nStep 7: DApp Statistics');
console.log('-----------------------');
const stats = {
totalUsers: initialUsers.length,
totalTokenSupply: token.execute('totalSupply', [], 'anyone').result,
activeProposals: 1,
totalVotes: 5,
nftsDistributed: voters.length,
totalGasCost: 0
};
console.log('DApp Statistics:', stats);
// Step 8: Create Dashboard Data
console.log('\\nStep 8: Dashboard Summary');
console.log('-------------------------');
storage.execute('set', ['dashboard', {
stats,
latestProposal: proposalId,
topHolders: initialUsers.slice(0, 3).map(u => u.address),
recentActivity: [
{ type: 'proposal_created', user: 'alice', timestamp: Date.now() },
{ type: 'votes_cast', count: 5, timestamp: Date.now() },
{ type: 'nfts_minted', count: 5, timestamp: Date.now() }
]
}], 'dappFoundation');
const dashboard = storage.execute('get', ['dashboard'], 'anyone').result;
console.log('Dashboard data stored');
console.log('\\n=====================================');
console.log('DApp Successfully Deployed!');
console.log('Total Gas Cost: 0 (Free on PureChain)');
console.log('=====================================');
await purechain.stop();
}
buildCompleteDApp();
async function createTokenEconomy() {
console.log('Creating Complete Token Economy');
console.log('================================\\n');
const purechain = new PureChain();
await purechain.start();
// Deploy main token
const mainToken = await purechain.contractEngine.deployContract({
type: ContractType.TOKEN,
name: 'EconomyToken',
symbol: 'ECO',
initialSupply: 1000000000,
decimals: 18
}, 'treasury', 0);
// Deploy staking token
const stakingToken = await purechain.contractEngine.deployContract({
type: ContractType.TOKEN,
name: 'StakedECO',
symbol: 'sECO',
initialSupply: 0,
decimals: 18
}, 'treasury', 0);
// Deploy liquidity pool token
const lpToken = await purechain.contractEngine.deployContract({
type: ContractType.TOKEN,
name: 'ECO-LP',
symbol: 'ECO-LP',
initialSupply: 0,
decimals: 18
}, 'treasury', 0);
console.log('Tokens deployed:');
console.log('Main token:', mainToken.contractAddress);
console.log('Staking token:', stakingToken.contractAddress);
console.log('LP token:', lpToken.contractAddress);
// Token distribution
const distribution = [
{ category: 'Public Sale', amount: 400000000, address: 'publicSale' },
{ category: 'Team', amount: 150000000, address: 'team' },
{ category: 'Advisors', amount: 50000000, address: 'advisors' },
{ category: 'Marketing', amount: 100000000, address: 'marketing' },
{ category: 'Development', amount: 100000000, address: 'development' },
{ category: 'Liquidity', amount: 100000000, address: 'liquidity' },
{ category: 'Staking Rewards', amount: 100000000, address: 'stakingRewards' }
];
console.log('\\nToken Distribution:');
distribution.forEach(d => {
mainToken.contract.execute('transfer', [d.address, d.amount], 'treasury');
console.log(`${d.category}: ${d.amount / 1000000}M ECO`);
});
// Simulate economic activity
console.log('\\nSimulating Economic Activity:');
// Users buy tokens
mainToken.contract.execute('transfer', ['user1', 1000000], 'publicSale');
mainToken.contract.execute('transfer', ['user2', 500000], 'publicSale');
mainToken.contract.execute('transfer', ['user3', 250000], 'publicSale');
// Users stake tokens
console.log('Users staking tokens...');
stakingToken.contract.execute('mint', ['user1', 1000000], 'stakingRewards');
// Create trading pairs
console.log('Creating liquidity pools...');
lpToken.contract.execute('mint', ['liquidityProvider', 1000000], 'liquidity');
console.log('\\nEconomy Statistics:');
console.log('Total Supply:', mainToken.contract.execute('totalSupply', [], 'anyone').result);
console.log('Circulating Supply:', 1750000);
console.log('Staked:', 1000000);
console.log('Total Value Locked: $0 (No fees!)');
await purechain.stop();
}
createTokenEconomy();
async function createNFTMarketplace() {
console.log('Building NFT Marketplace');
console.log('========================\\n');
const purechain = new PureChain();
await purechain.start();
// Deploy marketplace infrastructure
const nftCollection = await purechain.contractEngine.deployContract({
type: ContractType.NFT,
name: 'PureArt Gallery',
metadata: {
description: 'Premium digital art on PureChain',
maxSupply: 10000,
royaltyPercentage: 10
}
}, 'marketplace', 0);
const escrow = await purechain.contractEngine.deployContract({
type: ContractType.ESCROW,
name: 'NFT Escrow'
}, 'marketplace', 0);
const storage = await purechain.contractEngine.deployContract({
type: ContractType.STORAGE,
name: 'Marketplace Data'
}, 'marketplace', 0);
console.log('Infrastructure deployed');
// Create NFT collections
const collections = [
{
name: 'Genesis Collection',
artist: 'artist1',
pieces: 10,
basePrice: 1000
},
{
name: 'Abstract Series',
artist: 'artist2',
pieces: 5,
basePrice: 2000
},
{
name: 'Digital Dreams',
artist: 'artist3',
pieces: 8,
basePrice: 1500
}
];
let tokenId = 1;
collections.forEach(collection => {
console.log(`\\nMinting ${collection.name}:`);
for (let i = 0; i < collection.pieces; i++) {
const nftData = {
tokenId: tokenId++,
name: `${collection.name} #${i + 1}`,
description: `Piece ${i + 1} from ${collection.name}`,
image: `ipfs://collection${tokenId}`,
attributes: [
{ trait_type: 'Collection', value: collection.name },
{ trait_type: 'Artist', value: collection.artist },
{ trait_type: 'Edition', value: i + 1 },
{ trait_type: 'Rarity', value: i < 2 ? 'Rare' : 'Common' }
]
};
nftCollection.contract.execute('mintNFT', [collection.artist, nftData], 'marketplace');
// List for sale
storage.contract.execute('set', [`listing_${nftData.tokenId}`, {
tokenId: nftData.tokenId,
seller: collection.artist,
price: collection.basePrice * (i < 2 ? 2 : 1),
listed: true,
createdAt: Date.now()
}], 'marketplace');
console.log(` Minted and listed NFT #${nftData.tokenId}`);
}
});
// Simulate marketplace activity
console.log('\\nMarketplace Activity:');
// Purchase NFT
const purchase1 = {
buyer: 'collector1',
tokenId: 1,
price: 2000
};
console.log(`Collector1 purchasing NFT #${purchase1.tokenId}...`);
nftCollection.contract.execute('transferFrom', ['artist1', purchase1.buyer, purchase1.tokenId], 'marketplace');
storage.contract.execute('set', [`sale_${Date.now()}`, purchase1], 'marketplace');
// Secondary sale
console.log('Secondary market sale...');
nftCollection.contract.execute('transferFrom', ['collector1', 'collector2', 1], 'marketplace');
// Auction simulation
console.log('\\nStarting auction for NFT #5:');
const auction = {
tokenId: 5,
startPrice: 3000,
endTime: Date.now() + 86400000,
bids: []
};
// Place bids
const bids = [
{ bidder: 'bidder1', amount: 3500 },
{ bidder: 'bidder2', amount: 4000 },
{ bidder: 'bidder3', amount: 4500 }
];
bids.forEach(bid => {
auction.bids.push(bid);
console.log(` ${bid.bidder} bids ${bid.amount}`);
});
storage.contract.execute('set', ['auction_5', auction], 'marketplace');
// Marketplace statistics
console.log('\\nMarketplace Statistics:');
console.log('Total NFTs:', tokenId - 1);
console.log('Total Sales:', 2);
console.log('Active Listings:', tokenId - 3);
console.log('Active Auctions:', 1);
console.log('Total Volume:', 6500);
console.log('Gas Fees Collected:', 0);
await purechain.stop();
}
createNFTMarketplace();
minePendingTransactions() after creating transactions
| Error Message | Cause | Solution |
|---|---|---|
| Network not found | Invalid network name | Use 'testnet', 'mainnet', or 'local' |
| Contract not found | Invalid contract address | Verify the contract address from deployment result |
| Invalid transaction | Missing required fields | Ensure from, to, amount, and timestamp are provided |
| Method not found | Calling non-existent contract method | Check available methods for the contract type |
const optimizedConfig = {
blockchain: {
maxTransactionsPerBlock: 100,
blockTime: 5000,
pruneAfterBlocks: 1000
},
api: {
cache: true,
cacheTime: 60000,
compression: true
},
storage: {
type: 'indexed',
indexFields: ['from', 'to', 'contractAddress']
},
network: {
maxPeers: 50,
messageTimeout: 5000
}
};
const purechain = new PureChain(optimizedConfig);
new PureChain(config?: IPureChainConfig)
| Parameter | Type | Description |
|---|---|---|
| config | IPureChainConfig | Optional configuration object |
| Method | Returns | Description |
|---|---|---|
| start() | Promise<void> | Initialize and connect to network |
| stop() | Promise<void> | Disconnect and cleanup |
| switchNetwork(network) | Promise<void> | Switch to different network |
| Property | Type | Description |
|---|---|---|
| blockchain | Blockchain | Blockchain instance |
| contractEngine | ContractEngine | Smart contract engine |
| api | BlockchainAPI | REST API server |
| network | PeerDiscovery | P2P network manager |
| database | Database | Storage interface |
| provider | NetworkProvider | Network connection provider |
| explorer | PureChainExplorer | Blockchain explorer API |
| networkConfig | INetworkConfig | Current network configuration |
| Method | Parameters | Returns | Description |
|---|---|---|---|
| createTransaction | transaction: ITransaction | void | Add transaction to pending pool |
| minePendingTransactions | minerAddress: string | Promise<void> | Mine all pending transactions |
| getBalance | address: string | number | Get address balance |
| getLatestBlock | - | Block | Get most recent block |
| isChainValid | - | boolean | Validate entire blockchain |
| Method | Parameters | Returns | Description |
|---|---|---|---|
| deployContract | config, deployer, balance | IDeployResult | Deploy new smart contract |
| getContract | address: string | SmartContract | Get contract by address |
| getAllContracts | - | SmartContract[] | Get all deployed contracts |
| executeContract | address, method, params, caller | IExecuteResult | Execute contract method |
| Method | Parameters | Returns | Description |
|---|---|---|---|
| connect | - | Promise<void> | Connect to network |
| disconnect | - | void | Disconnect from network |
| getBlockNumber | - | Promise<number> | Get current block number |
| sendTransaction | tx: ITransaction | Promise<string> | Send transaction to network |
| call | method, params | Promise<any> | Make RPC call |