diff options
author | Al <80943867+al-ias@users.noreply.github.com> | 2022-07-23 20:30:30 +0200 |
---|---|---|
committer | Al <80943867+al-ias@users.noreply.github.com> | 2022-07-23 20:30:30 +0200 |
commit | dde96818dc33c2d49dd9ba30244244dadb38cd3b (patch) | |
tree | 546ac457abeeaf16499bbbde648604eac6d68cd4 | |
parent | 118bda3ead4e3c3da913931f028d06a07eb3db19 (diff) |
Translate pattern observer (9.F)
-rw-r--r-- | it-it/solidity.html.markdown | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/it-it/solidity.html.markdown b/it-it/solidity.html.markdown index 55649eab..94fb4803 100644 --- a/it-it/solidity.html.markdown +++ b/it-it/solidity.html.markdown @@ -756,4 +756,42 @@ reveal(100, "ilMioSegreto"); // in base all'orario; si può creare un codice esterno che li pinghi reglarmente // oppure fornire degli incentivi (ether) a qualcun'altro che lo faccia +// F. Pattern Observer +// Un pattern observer permette di iscriversi come osservatore e +// registrare una funzione che verrà chiamata dall'oracle +// (N.B. l'oracolo paga perchè sia eseguita quest'azione) +// Ci sono alcune somoglianze nella registrazione con Pub/sub + +// Questo è un contratto astratto che importano sia il client che il server +// Il client dovrebbe implementarlo +contract SomeOracleCallback { + function oracleCallback(int _value, uint _time, bytes32 info) external; +} + +contract SomeOracle { + SomeOracleCallback[] callbacks; // array di tutti gli osservatori iscritti + + // Osservatori iscritti + function addSubscriber(SomeOracleCallback a) { + callbacks.push(a); + } + + function notify(value, time, info) private { + for(uint i = 0;i < callbacks.length; i++) { + // tutti gli osservatori iscritti dovranno implementare la oracleCallback + callbacks[i].oracleCallback(value, time, info); + } + } + + function doSomething() public { + // Codice che fa qualcosa + + // Notifica a tutti gli iscritti + notify(_value, _time, _info); + } +} + +// Il contratto client può aggiungersi agli iscritti (con addSubscriber) +// del contratto SomeOracle, importando SomeOracleCallback + ``` |