Skip to content

Permulaan

Menginstal kompiler CashScript

baris perintah Compiler CashScript cashc dapat diinstal dari NPM.

npm install -g cashc

Memasang JavaScript SDK

SDK JavaScript dapat dipasang ke proyek Anda dengan NPM.

npm install cashscript

:::peringatan CashScript hanya menawarkan SDK JavaScript, tetapi kontrak CashScript juga dapat diintegrasikan ke dalam bahasa lain. Karena tidak ada SDK siap pakai yang tersedia untuk mereka, ini dianggap sebagai penggunaan tingkat lanjut, dan disarankan untuk menggunakan JavaScript SDK. :::

Ada beberapa contoh yang tersedia di Contoh halaman, yang dapat digunakan untuk mengambil inspirasi. Contoh lebih lanjut dari integrasi JavaScript dapat ditemukan di GitHub. Contoh sederhana disertakan di bawah ini.

pragma cashscript ^0.7.0;

contract TransferWithTimeout(pubkey sender, pubkey recipient, int timeout) {
    // Allow the recipient to claim their received money
    function transfer(sig recipientSig) {
        require(checkSig(recipientSig, recipient));
    }

    // Allow the sender to reclaim their sent money after the timeout is reached
    function timeout(sig senderSig) {
        require(checkSig(senderSig, sender));
        require(tx.time >= timeout);
    }
}

:::tip Baca selengkapnya tentang sintaks bahasa CashScript di Deskripsi Bahasa. :::

Mengintegrasikan ke dalam JavaScript

Sementara contoh yang lebih mendetail tersedia di GitHub, kami menunjukkan integrasi kontrak TransferWithTimeout dalam proyek JavaScript.

Setelah mengkompilasi file kontrak ke JSON artefak dengan cashc, itu dapat diimpor ke SDK CashScript.

cashc ./transfer_with_timeout.cash --output ./transfer_with_timeout.json
const { ElectrumNetworkProvider, Contract, SignatureTemplate } = require('cashscript');
const { alice, bob, alicePk, bobPk } = require('./keys');

async function run() {
  // Import the TransferWithTimeout JSON artifact
  const artifact = require('./transfer_with_timeout.json');

  // Initialise a network provider for network operations
  const provider = new ElectrumNetworkProvider('mainnet');

  // Instantiate a new TransferWithTimeout contract
  const contract = new Contract(artifact, [alicePk, bobPk, 600000], provider);

  // Call the transfer function with Bob's signature
  // i.e. Bob claims the money that Alice has sent him
  const transferDetails = await contract.functions
    .transfer(new SignatureTemplate(bob))
    .to('bitcoincash:qrhea03074073ff3zv9whh0nggxc7k03ssh8jv9mkx', 10000)
    .send();
  console.log(transferDetails);

  // Call the timeout function with Alice's signature
  // i.e. Alice recovers the money that Bob has not claimed
  const timeoutDetails = await contract.functions
    .timeout(new SignatureTemplate(alice))
    .to('bitcoincash:qqeht8vnwag20yv8dvtcrd4ujx09fwxwsqqqw93w88', 10000)
    .send();
  console.log(timeoutDetails);
}

:::tip Baca selengkapnya tentang JavaScript SDK di dokumentasi SDK. :::