Usines de contrat
-
-
Il apparaît comme `create_contract {stockage 'g;paramètre 'p;Code ...} `fonctionnerait,mais cela s'enflammera unpeu de lataille d'un contrat,et on dirait qu'il devrait y avoir unmoyen demanipuler cela comme dans l'instanciation de classe de style Java de la solidité.It appears like `CREATE_CONTRACT { storage 'g ; parameter 'p ; code ... }` would work, but this will bloat the size of a contract a bit, and it feels like there should be a way to handle this gracefully like in Solidity's Java style class instantiation.
- 0
- 2019-03-11
- Rob
-
Sinon,unexemplepropre à Michelson seraitbien.If not, a clean example in Michelson would be nice.
- 0
- 2019-03-11
- Rob
-
Ok cool,probablement unemanière à cemoment-là.ok cool, probably a ways out then.
- 0
- 2019-03-12
- Rob
-
Jemets un commentaire quej'ai supprimépour le convertiren une réponse.J'ai raté votre commentaire qui a été ajouté après.Mesexcusespour cela.I put a comment that I deleted to convert it into an answer. I missed your comment that was added afterwards. My apologies for this.
- 1
- 2019-03-12
- FFF
-
2 réponses
- votes
-
- 2019-03-12
Il y a une discussiontrès succincte dans l'annonce de SmartPy https://medium.com/@smartpy_io/introducing-smartpy-and-smartpy-io-d4013bee7d4e#15ee .
L'idéeest d'avoir un contrat contenant un BIG_MAPet chaque élément du Big_MAP représente un contrat.
Cecin'est absolumentpas limité à SmartPyet ilest directementfaisable dans Michelson,liquidités oufi.
Ce sujetest également apparuici: quelest le conteneur BigMapet pourquoiest-ilimportant?
There is a very succinct discussion in the announcement for SmartPy https://medium.com/@SmartPy_io/introducing-smartpy-and-smartpy-io-d4013bee7d4e#15ee.
The idea is to have a contract that holds a big_map and each element of the big_map represents a contract.
This is absolutely not restricted to SmartPy and it is directly doable in Michelson, Liquidity or Fi.
This subject also appeared here: What is the BigMap container and why does it matter?
-
J'apprécie votre réponseet jene veuxpas que cela rencontrenégatif,maisje pense quenous devonstrouver une solutionplus complète à ceproblème à courttermepourfaire du développement DAPPproductif.I appreciate your response and don't want this to come across negative, but I feel we need to come up with a more comprehensive solution to this problem in the near term to make DAPP development productive.
- 0
- 2019-03-12
- Rob
-
Jepeuxfacilement accepter que cen'estpas la solutionfinaleet unique.I can easily agree that this is not the final and only solution.
- 0
- 2019-03-12
- FFF
-
référence ci-dessouspour voir unexemple de ce queje pensaisreference below to see an example of what I was thinking
- 0
- 2019-03-14
- Rob
-
- 2019-03-14
Voici unexemple de contrat quigère cela dans la liquidité. Il y a le défi unique desfonctions d'écriture quine peuvent utiliser que des appels deprocédure à distance à lafin de leurexécution:
type plus_storage = { count: nat, plus_owner: address, }; contract PlusOne = { type storage = plus_storage; let%init storage = (y: nat) => { count: y, plus_owner: Current.sender(), }; let%entry main = (p: nat, storage) => { if (Current.sender() != storage.plus_owner) { failwith("invalid caller"); }; ([], storage); } }; type storage = { owner: key, pl: address, }; let%init storage = (contract_owner: key) => { owner: contract_owner, pl: KT1111111111111111111111111111111111, } let%entry other = (param: nat, storage) => { let t: option(PlusOne.instance) = Contract.at(storage.pl); let t = switch(t) { | None => Current.failwith() | Some(inst) => inst }; let op = Contract.call( ~dest=t, ~amount=0tz, ~entry=main, ~parameter=param); ([op], storage); }; let%entry main = ((), storage) => { let manager = Crypto.hash_key(storage.owner); let delegate = Some(manager); let spendable = false; let amount = Current.amount(); let init_value: nat = 0; let (c_op, c_addr) = Contract.create( ~manager, ~delegate, ~spendable, ~delegatable=false, ~amount, ~storage={count: init_value, plus_owner: Contract.address(Contract.self())}, (contract PlusOne), ); let storage = storage.pl = c_addr; ([c_op], storage); };
Celame permet deme demander si cela conduira à despoints determinaison ressemblant à des "commandes"et "ramassage",c'est-à-dire un restaurant.
Here's an example of a contract handling this in liquidity. There's the unique challenge of writing functions that can only utilize remote procedure calls at the end of their execution:
type plus_storage = { count: nat, plus_owner: address, }; contract PlusOne = { type storage = plus_storage; let%init storage = (y: nat) => { count: y, plus_owner: Current.sender(), }; let%entry main = (p: nat, storage) => { if (Current.sender() != storage.plus_owner) { failwith("invalid caller"); }; ([], storage); } }; type storage = { owner: key, pl: address, }; let%init storage = (contract_owner: key) => { owner: contract_owner, pl: KT1111111111111111111111111111111111, } let%entry other = (param: nat, storage) => { let t: option(PlusOne.instance) = Contract.at(storage.pl); let t = switch(t) { | None => Current.failwith() | Some(inst) => inst }; let op = Contract.call( ~dest=t, ~amount=0tz, ~entry=main, ~parameter=param); ([op], storage); }; let%entry main = ((), storage) => { let manager = Crypto.hash_key(storage.owner); let delegate = Some(manager); let spendable = false; let amount = Current.amount(); let init_value: nat = 0; let (c_op, c_addr) = Contract.create( ~manager, ~delegate, ~spendable, ~delegatable=false, ~amount, ~storage={count: init_value, plus_owner: Contract.address(Contract.self())}, (contract PlusOne), ); let storage = storage.pl = c_addr; ([c_op], storage); };
It makes me wonder if this will lead to endpoints that are like "order" and "pickup", ie a restaurant.
Il y aeu des recherches sur lamanière dont une usine de contratpourrait êtrefaite à Michelson/Liquidity?
Elaborer,en solidité,une usine de contratpourrait ressembler à:
(référencé de https://ethereum.stackexchange.com/questions/13415/Déployer-contrat-de-contrat-contract-in-solidité )
Il s'agit d'unefonctionnalitépuissante dans le développement DAPP,carelle vouspermet de créer une structure orientée objetpour votre DAPP lorsque les demandespeuvent créer denouveaux contrats. Il s'agit d'unmodèle de conceptionbien établi,alors qu'est-ce que l'équivalent serait dans l'écosystème Tezos?