Skip to content

スマートコントラクトの原理

スマートコントラクトとは?

一言で説明

スマートコントラクト = Smart Contract = スマート + コントラクト

従来のコントラクト:
「A が仕事を完了したら、B が A に支払う」
→ 弁護士/裁判官の執行が必要
→ 紛争が発生する可能性

スマートコントラクト:
if (Aが仕事を完了 == true) {
  自動送金;
}
→ コードは法律
→ 自動執行、誰も阻止できない

スマートコントラクトの仕組み

1. コードデプロイ

1. 開発者がコントラクトコードを作成
   Solidity の例:
   ```solidity
   contract PulsePayStake {
     uint256 public rewardRate = 40;
     
     function stake(uint256 amount) public {
       // ステーク処理
     }
   }
  1. バイトコードにコンパイル

  2. ブロックチェーンにデプロイ

    • Gas 料金を支払い
    • コントラクトアドレスを取得
  3. コントラクトがチェーンに記録

    • 恒久的に存在
    • 改竄不可能

### 2. 呼び出し実行

ユーザーがコントラクトを呼び出す:

  1. ユーザーがトランザクションを開始 transaction = { to: "0x1234...(コントラクトアドレス)", data: "stake(1000)" }

  2. トランザクションがブロックにパックされる

    • マイナー/検証者がコントラクトを実行
    • Gas 料金を計算
  3. 状態更新

    • ステーク記録の更新
    • 残高の変化
  4. トランザクション確認

    • ブロックチェーンに書き込み
    • 結果は不可逆

## イーサリアム仮想マシン (EVM)

### EVM とは?

EVM = Ethereum Virtual Machine

類似:

  • Java 仮想マシン (JVM) → Java コードを実行
  • EVM → Solidity コードを実行

特徴:

  • チューリング完全(任意のロジックを計算可能)
  • サンドボックス実行(安全隔離)
  • 決定性(同じ入力→同じ出力)

### Gas の概念

Gas = コントラクト実行の「燃料」

例え:

  • 車を走らせるには汽油が必要
  • コントラクトを実行するには Gas が必要

Gas 料金 = Gas 単価 × Gas 消费量

例:

  • ETH 送金:21000 Gas
  • ERC-20 送金:65000 Gas
  • 複雑な DeFi 操作:100000-500000 Gas

Gas 単価は市場が決める:

  • ネットワーク混雑 → Gas 値上げ
  • BSC:Gas 単価が低い(約 5 Gwei)
  • ETH:Gas 単価が高い(変動大)

## スマートコントラクトの構造

### 標準 ERC-20 トークンコントラクト

主要関数:

  1. 送金 function transfer(address to, uint256 amount)

  2. 承認 function approve(address spender, uint256 amount)

  3. 承認済送金的移動 function transferFrom(address from, address to, uint256 amount)

  4. 照会 function balanceOf(address account) function allowance(address owner, address spender) function totalSupply()


### PulsePay 報酬コントラクトの例

```solidity
// 簡略化の例
contract PulsePayRewards {
    // 総ステーク量
    uint256 public totalStaked;
    
    // ユーザーのステーク量
    mapping(address => uint256) public stakes;
    
    // ステーク関数
    function stake(uint256 amount) external {
        require(amount >= 10, "Min 10 AIP");
        
        // AIP を移送
        IERC20(AIP).transferFrom(msg.sender, address(this), amount);
        
        // 状態を更新
        stakes[msg.sender] += amount;
        totalStaked += amount;
    }
    
    // 報酬を受け取る
    function claim() external {
        uint256 reward = calculateReward(msg.sender);
        // 報酬を配布
        USDT.transfer(msg.sender, reward);
    }
}

スマートコントラクトの制限

1. データソースの問題

スマートコントラクトはオンチェーンデータにしかアクセスできない

問題:
- オフチェーンデータを直接取得できない
- BTC 価格がわからない
- 天気状況がわからない

解決策:オラクル (Oracle)

Chainlink のワークフロー:
┌──────────────────────────────────────┐
│  価格データソース(Coinbase、Binance...)   │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│  Chainlink オラクルネットワーク                 │
│  (分散化聚合データ)                  │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│  スマートコントラクト                             │
│  (信頼できる価格データ)                 │
└──────────────────────────────────────┘

2. アップグレードの問題

従来のソフト:いつでも更新可能
スマートコントラクト:デプロイ後は変更不可

リスク:
- バグが見つっても修正できない
- 脆弱性が見つかっても修补できない

解決策:
1. プロキシパターン(Proxy Pattern)
2. ダイアモンドパターン(Diamond Pattern)
3. タイムロックアップグレード(Timelock)

PulsePay が採用:
- マルチシグ制御
- タイムロックアップグレード
- 段階的な去中心化

スマートコントラクトのセキュリティ

一般的な攻撃タイプ

攻撃タイプ原理防范
リエントランシー攻撃再帰呼び出しで資金を引き出すチェック-エフェクト-インタラクション
整数オーバーフロー数値計算エラーSafeMath を使用
フラッシュローン攻撃大口資金で価格操纵価格オラクル保護
フロントランニングボットが取引を複製MEV 保護

セキュリティ措施

1. コード監査
   - サードパーティセキュリティ会社に監査依頼
   - オープンソースでコミュニティレビュー

2. テストカバレッジ
   - ユニットテスト
   - 統合テスト
   - フォーマル検証

3. 権限制限
   - マルチシグ制御
   - タイムロック
   - 緊急停止

4. モニタリングアラート
   - オンチェーンモニタリング
   - 異常取引アラート
   - 自動サーキットブレーカー

スマートコントラクトのGas最適化

なぜ最適化が必要?

Gas 料金 = 実行コスト

最適化好处:
- コスト削減
- 取引成功率向上
- ユーザー体験向上

一般的なテクニック

solidity
// ❌ Gas の無駄遣い
uint256 public totalStaked; // チェーン上に存储

function getReward() view returns (uint256) {
    return totalStaked * rewardRate / 100;
}

// ✅ Gas の節約
// チェーン上ストレージの読み取りを削減
// イベントを使用してストレージの代わりに

Gas 最適化原则

1. チェーン上ストレージの削減
   - storage よりも memory を使用
   - バッチ操作で取引数を削減

2. データ構造の最適化
   - 変数をコンパクトに配置
   - string よりも bytes32 を使用

3. 繰り返し計算の回避
   - 計算結果をキャッシュ
   - 定数を使用

4. ロジックの簡素化
   - 条件判断をマージ
   - 無効コードの削除

スマートコントラクトと PulsePay

PulsePay のコントラクトアーキテクチャ:

┌──────────────────────────────────────┐
│  AIP Token コントラクト                      │
│  - ERC-20 標準                       │
│  - 送金、承認、スナップショット                   │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│  報酬分配コントラクト                          │
│  - ステーク管理                           │
│  - 報酬計算                           │
│  - 受取ロジック                           │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│  収入管理コントラクト                          │
│  - 収入収集                           │
│  - 分配実行                           │
│  - チェーン記録                           │
└──────────────────────────────────────┘

セキュリティ措施

✅ サードパーティ監査
   CertiK セキュリティ監査

✅ タイムロック
   主要操作は 24-48 時間遅延必要

✅ マルチシグ制御
   チーム資金はマルチシグ管理

✅ 緊急停止
   内蔵コントラクト停止メカニズム

✅ 段階的な去中心化
   Phase 1-3 段階的開放

💡 コントラクトを見る

すべての PulsePay スマートコントラクトは BSC チェーンで公開されており、bscscan.com でソースコードを確認できます。

次のステップ

PulsePay Protocol - AI 使用即收益