Ethereal:分散仮想バンキングシステム‐第II部


これは前回の投稿からのフォローアップ記事です.



前の記事では、アカウント、アカウントの詳細を表示し、バランスを追加する新しいアカウントを作成するような機能について議論した.今日、私たちはどのように機能を追加することができます学びましょう:バランスを引き出し、銀行の他の仮想アカウントへの転送量とトランザクションの履歴を表示します.

第3部:銀行の他の仮想口座への貸借残高と振替額
ジャストナビゲートSimpleStorage.sol ファイルを貼り付けます.

    //Function to withdraw balance from your existing accounts, the balance will be transferred to your blockchain account
    function withdrawBalance(
        uint256 _serial,
        uint256 _amount,
        address payable _creator
    ) 
    external returns (bool _success) {
        if (accounts[_serial].balance >= _amount / 1000000000000000000 + 1) {
            _creator.transfer(_amount);
            accounts[_serial].balance -= _amount / 1000000000000000000;
            bankBalance -= _amount / 1000000000000000000;
            transacNum++;
            transactions[transacNum] = Transaction(
                transacNum,
                accounts[_serial].balance,
                _amount / 1000000000000000000,
                block.timestamp,
                "Withdrawal",
                _serial
            );
            emit TransactionCompleted(
                _amount / 1000000000000000000,
                transacNum,
                serialNumber,
                "Withdrawal"
            );
            return true;
        } else {
            revert("Insufficient Funds");
            //   revert InsufficientFunds(_serial,_amount/1000000000000000000,accounts[_serial].balance-1,'Withdrawal');
        }
    }



    //Function to virtually send money from one bank account to other
    function transactAmount(
        uint256 _amount,
        uint256 _serial_2,
        uint256 _serial
    ) public {
        if (accounts[_serial].balance >= _amount / 1000000000000000000 + 1) {
            accounts[_serial].balance -= _amount / 1000000000000000000;
            accounts[_serial_2].balance += _amount / 1000000000000000000;
            transacNum++;
            emit TransactionCompleted(
                _amount / 1000000000000000000,
                transacNum,
                serialNumber,
                "TransferMoneySent"
            );
            transactions[transacNum] = Transaction(
                transacNum,
                accounts[_serial].balance,
                _amount / 1000000000000000000,
                block.timestamp,
                "TransferMoneySent",
                _serial
            );
            transacNum++;
            emit TransactionCompleted(
                _amount / 1000000000000000000,
                transacNum,
                serialNumber,
                "TransferMoneyReceived"
            );
            transactions[transacNum] = Transaction(
                transacNum,
                accounts[_serial_2].balance,
                _amount / 1000000000000000000,
                block.timestamp,
                "TransferMoneyReceived",
                _serial_2
            );
        } else {
            revert("Insufficient Funds");
            //   revert InsufficientFunds(_serial,_amount/1000000000000000000,accounts[_serial].balance-1,'TransferMoney');
        }
    }


さて、フロントエンド部に移しましょう.
今、この機能のためのロジックは、フロントエンドでわずかに逆直観的ですが、バックエンドでは非常に簡単ですが、アドバンス関数のように同じ3つの入力を取っているアドバンスバランス機能に類似した引き出しバランス機能を作成しますが、この関数はまた、契約のバランスにアクセスする必要があります.また、外部からのアクセスに必要な契約の一部である契約の残高にアクセスできません
撤回残高
契約からのエーテル
実際のエーテルが契約から運ばれるので、契約(銀行)と口座の仮想バランスは減少します.
さて、どのように他のEthereumアカウントに契約からエーテルを送信するには、よくこれは理解するのにしばらくかかりましたが、すべてのアドレスがアクセスする2つの方法があり、1つは、バランスメソッドと他の転送方法ですが、今ここで我々は、他のGanacheアカウント(ここでアカウントは、Metamaskアカウントに接続されている)への契約から実際のエーテルを転送するための転送方法を使用します.
今、前の関数のように、フロントエンドから渡される量を減算する必要がある直観に従って、今すぐ引き出しの機能を追加してみましょう、そしてもう1つの追加の行は、我々は我々が引き出しのアカウントで渡すというクリエイターのアドレスへの契約から実際のエーテルを転送するために追加する必要があります.
今、1つのチェックを追加する必要がありますが、私たちがバランスを引き出している仮想アカウントは、我々が撤退したい金額よりも大きい量を持つ必要があります.
取外し機能コード
if(account[serialNumber].balance){

   account[serialNumber].balance-=amount;

   account[0].balance-=amount;

   _creator.transfer(amount);

}
これは、作成者アカウントであるMetamaskに接続されたGanacheアカウントへの契約額から転送するための構文です
フロントエンドについては、AccountDeDetailページに行こうとして、別のグリッドボックスに行こうとしています.一方、前のコンポーネントで行われているように、フォーム入力フィールドと送信ボタンを作成します.フォームの入力フィールドの値は、バックエンド関数で渡される引き出しバランス状態変数です.
「送信」ボタンをクリックすると、前のアドバンス関数に似た構文を持つフロントエンド上の引き出しバランス関数が渡されます.
値が与えられていないことに気づくことができます.
まず最初に、なぜ我々がSendオプションを使用する必要があるのですか?私たちがバランスを取り戻しているとき、SENDオプションを使用する必要があります.
await contract.methods.withdrawBalance(id,withdrawBalance,account).send({from:account})
この後、あなたは.then and .catch メソッドを使用すると、更新されたバランスを取得し、バランス変数の状態をその更新されたバランスに設定する別のAsync関数を実行する必要があります.あなたのガナッシュのクライアントは、金額がそれに追加されていることを確認することができます、あなたの撤退が成功したことを証明.
さて、このモジュールの次の機能を実装して、1つのアカウントから別のアカウントへの仮想的な量を転送するために、このロジックはエーテルの実際の関与がないので、以前のすべての関数の中で最も簡単に見つけることができます.
両方のアカウントが銀行に存在しているので、銀行残高は増減されません、あるいは、我々はちょうど我々が移っている口座の仮想バランスを増やして、我々が量を送っている口座の仮想バランスを減らす必要があります.
すぐにこの機能のためのバックエンドコードを見ましょう、我々は直観によって3つの入力、どんな推測をするバックエンドの公共機能であるTransfer Rate機能を作成する必要があります?
さて、転送する量、金額が転送されている口座のシリアル番号、転送される口座のシリアル番号です.
渡される金額である関数を渡す前にチェックを追加する必要があります.
転送量の機能のコード断片を以下に示します:
転送コード
if(accounts[serial_1].balance>amount){
   accounts[serial_1].balance-=amount;
   accounts[serial_2].balance+=amount;
}
ここで、この機能のフロントエンドコードを完成させましょう.グリッドボックスにフォームを作成するために必要な同じ古い処理を完了させましょう.このフォームでは、2つの入力を必要とします.1つは、金額を送信する必要がある2番目のアカウントのシリアル番号で、もう一方は転送先の量です.送信ボタンをクリックして、フロントエンドにトランスファー量関数を渡す必要があります.
この関数は、フォーム値の入力を受け取り、送信オプションを使用してバックエンド上で関数を実行する必要がある上記の関数と同様です.
await contract.methods.transferAccount(amount,id,secondserialNumber).send({from:account})
そして、この後、我々は同様の.then and .catch この約束を解決し、前の例と同様に、バランスを再度更新バランスに設定する機能を実行するメソッドです.

パート4 :トランザクション履歴の表示

移動するSimpleStorage.sol ファイルを貼り付けます.
    //Defining a struct to store transaction record
    struct Transaction {
        uint256 transacNum;
        uint256 currentBalance;
        uint256 amountTransacted;
        uint256 createdAt;
        string transacType;
        uint256 accountSerialNumber;
    }

それが我々の計画を終わらせる.さらに、プロジェクトのスタイリングをカスタマイズすることができますまた、実際のアカウントとシリアル番号を置き換えるように、トランザクションのアカウントを使用して任意のより多くの新機能を追加します.
この記事を読んでくれてありがとう.あなたがこのプロジェクトを構築している大きな時間を持っていて、ブロックチェーン技術についてもっと学びましたように.
このプロジェクトに必要なすべてのリソースをクリックすることでhere .
プロジェクトgithubリポジトリ

deucaleon18 / ETHEREAL

分散仮想銀行システム
プロジェクトについて
このプロジェクトは、私たちのクラブの一部として私たちのクラブ、GNU Linuxユーザーのグループのイベントの一環として構築された私たちは10日間の間にゼロからプロジェクトを構築するインド中から学生を指導したコードの10日間.
このdappはSolidity Smart Contracts フロントエンドはフレームワークの反応JSを使用して構築され、アプリケーションはローカルのブロックチェーンネットワークに展開されます.Ganache . プロジェクト全体がEthereumサポートされているブラウザ上で動作し、Metamask 拡張.については、コンパイルされた契約書のコンパイルとテストを行います.Truffle を使用した.最後に、フロントエンドは素晴らしい図書館を使用して、Solility契約に接続されました.web3 .
このプロジェクトを構築するための詳細なガイドはresources フォルダ
ディスプレイ
ここに我々が構築したプロジェクトのいくつかの一見があります.
のホームページ

登録する

アカウントページ

アカウント詳細

転送.
View on GitHub
プロジェクト協力者
.ltag__user__id__601717 .アクションボタン
背景色:けちFF!重要
色:千円!重要
ボーダーカラー:けちFF!重要


Shubham Shantam Raju フォロー
Open Source Enthusiast | Sophomore of NIT Durgapur | Member of GNU Linux Users' Group | Full Stack Devleoper (MERN) | Blockchain Enthusiast
.ltag__user__id__601612 .アクションボタン
背景色:経線D 91 C 1 C!重要
色:千円!重要
ボーダーカラー:1 .重要


Shashank Shekhar フォロー
Open Source Enthusiast | Junior Developer at GNU/Linux User's Group NIT Dgp | Full Stack developer | Blockchain Fanatic
.ltag__user__id__601724 .アクションボタン
背景色:こっち重要
色:千円!重要
ボーダーカラー:こっち重要


Apurva Jyoti Paul フォロー
Connect with us :