私は、契約を他の契約の機能を呼び出すことができる機能にしようとしています。私の目標の重要な部分は、契約書は輸入声明なしでは展開できず、デフォルトで契約名を知らないということです。換言すると、この契約のユーザは、呼び出された契約データ(すなわち、住所、名前)をパラメータとして入力する。これを達成する最良の方法は何ですか?外部契約を強固に呼び出す
4
A
答えて
5
なぜこれがダウンリストされたのか分かりません。
質問が正しくとわかっている場合は、通信する必要がある契約の具体的な詳細を知らなくても契約を展開したいと考えています。
インターフェイスの知識があると仮定することで、これを大幅に簡略化できます。
契約コードをインポートせずにインタフェースを定義することができます。関数インタフェースを定義し、空の関数定義を残す:
contract WidgetInterface {
function doSomething() returns(uint) {}
function somethingElse() returns(bool isTrue) {}
}
使用できるインターフェイスの契約は、実際の契約に話をすること:
WidgetInterface w = WidgetInterface(actualContractAddress);
私の意見では、通常、認可登録することが可能と賢明だろう/あなたが行くように有効な契約。これらの線に沿って、それが安全に話すことができる契約のリストを維持:
if(!isAuthorized(actualContractAddress)) throw;
actualContractAddress
が送信者によって供給され
とisAuthorized()
は、あなたが内部のレジストリを照会するために働いている機能です。
希望します。
0
Rob Hitchensの示唆したように、インターフェイスを使用してこれを行うこともできます。また、インターフェイスを動的に定義し、.call、.callcode、.delegatecallを使用してメソッドを実行することもできます。ここ
は、例えば次のとおり
contract ContractsCaller {
function execute(address contractAt, uint _i, bytes32 _b) returns (bool) {
return contractAt.call(bytes4(sha3("testMethod(uint256,bytes32)")), _i, _b);
}
}
contract Test {
uint256 public i;
bytes32 public b;
function testMethod(uint256 _i, bytes32 _b) {
i = _i;
b = _b;
}
}
テストは別のファイルに定義することができます。 ContractsCallerは、そのアドレスと呼び出しているメソッドのシグネチャ以外に、Testについて何も知る必要はありません。
メソッドのシグネチャはメソッド名の最初の4バイトとそのパラメータのタイプである:
bytes4(sha3("testMethod(uint256,bytes32)"))
関連する問題
- 1. サービス契約に動的に追加された操作を呼び出す
- 2. Javascriptで外部APIを呼び出す
- 3. Pythonの外部コマンドを呼び出す
- 4. WCFで片方向操作契約を呼び出せません
- 5. クラスと外部メソッド呼び出し
- 6. エラーが外部関数呼び出し
- 7. 呼び出し外クラスの内部クラス
- 8. 外部メソッド呼び出しヘルプ
- 9. 外部アプリケーションの呼び出し
- 10. Grails 3外部メソッドの呼び出し
- 11. Java:匿名の内部クラスで外部クラスメソッドを呼び出す
- 12. pthreadを外部にラップしてメンバーfuncを呼び出す
- 13. 契約
- 14. C#(httpwebrequest)で外部サイトにPOSTを呼び出す
- 15. 関数呼び出し時に外部Javascriptをロードする
- 16. コールバック中にクラス関数の外部オブジェクトを呼び出す
- 17. レールを外部データベース呼び出しにする方法は?
- 18. couchdb関数の外部に変数を呼び出す?
- 19. sconsに外部スクリプトを呼び出す方法は?
- 20. 外部APIからRails 5アプリケーションにデータを呼び出す
- 21. 外部APIをRuby on Railsアプリケーションに呼び出す
- 22. コード契約の例外使用例
- 23. C#契約の実装と例外
- 24. ASP.Net Core:HTTPSを強制的に呼び出すapp.Use()呼び出しの場所
- 25. コード契約、forallおよびカスタムenumerable
- 26. 外部API呼び出し後にWCFプロキシが失敗する
- 27. 外部APIを呼び出すモデルインスタンスメソッドをテストする方法
- 28. ボタンをクリックして外部Javascriptの機能を呼び出す
- 29. JavaScriptを使って外部プログラムを呼び出す(例:Cプログラム)
- 30. 春クラウド契約:1つのファイルに複数の契約