Contrat acceptant un type de type
-
-
Jementionnetouttypeparce qu'ilest utilisé dans ProtobufI mention ANY type because it is used in protobuf
- 0
- 2019-03-12
- Rob
-
2 réponses
- votes
-
- 2019-03-12
Si vous le devez,vouspouvez utiliser
octets
etpack
/Déballez
: http://tezos.gitlab.IO/mainnet/whitedoc/michelson.html#operations-on-bytespour 'tout stockage',vouspouvez utiliser
paire (big_mapbytes octets) ...
,avec vospropres conventionspour lestouches (peut-êtrepalléeparpaire/liste/etc.expressions avec certainesbalises de chaîne).Lorsque vousfaites ces choses,vous abandonnez quelques avantages du système detype.
Iln'y a actuellement aucun supportni conventionpour les données «marquées».Lorsque vous utilisez
octets
commetype "n'importe quel",le consommateur (qui vadécompressez ) devrait déjà connaître letype de Michelson attenduet sa sémantiqueparticulière: les octetsn'encosent qu'un Michelineexpression,sanstype (et aucune annotation). If you must, you can use
bytes
andPACK
/UNPACK
: http://tezos.gitlab.io/mainnet/whitedoc/michelson.html#operations-on-bytesFor 'any storage', you can use
pair (big_map bytes bytes) ...
, with your own conventions for the keys (perhaps packed pair/list/etc expressions with some string tags).When doing these things you abandon some benefits of the type system.
There is currently no support or convention for 'tagged' data. When using
bytes
as an 'any' type, the consumer (who willUNPACK
) should somehow already know the expected Michelson type and its particular semantics: the bytes only encode a Micheline expression, with no type (and no annotations).-
Maispeut-être que vouspourriezfaire un contrat accepter `(paire String Octes)` Où la chaîneest lenom de laméthode.Jepense que celafonctionneraitpour créer un contratmises àniveau.But perhaps you could make a contract accept `(Pair string bytes)` where string is the method name. I think that would work for creating an upgradable contract.
- 0
- 2019-03-12
- Rob
-
- 2019-03-12
Si vous souhaitez simplementexpédier à unensemble deméthodes spécifiées,lestypes SES sont connus,ce que vous recherchezest letype «alternatif» ou letype de somme,où la valeurest (gauche (...)),c'est-à-dire un chemin des constructeursgaucheet droit autypefinal de laméthode.
Sinon,si vous souhaitez une version complètementgénérique,permettant d'ajouter denouvellesméthodeset types à l'avenir,vouspouvez utiliser le décompressionpourextraire l'argument d'untype d'octetsgénériques.De cettefaçon,toutes lesméthodes sontméthodes d'octetset vouspouvezexpédier à l'aide d'un autre argument (un hachage duprototype deméthodeparexemple).Bien que cela résout votreproblème,cela signifie qu'iln'y aplus de contrôle statique aux limites de votre contrat: votre codepeut contenir uneerreur,celane sera détecté que lorsque le déback échouera,peut-être rendre votre contrat complètementinutile.
If you just want to dispatch to a specified set of methods, who ses types are known, what you are looking for is the « alternative » type or sum type, where the value is (Left (Right (... )), ie a path of Left and Right constructors to the final type of the method.
Otherwise, if you want a completely generic version, allowing addition of new methods and types in the future, you can use UNPACK to extract the argument from a generic Bytes type. This way, all the methods are Bytes method, and you can dispatch using another argument (a hash of the method prototype for example). Though it solves your problem, it means that there is no static control any more at the boundaries of your contract : your code might contain an error, that will only be detected when the UNPACK will fail, maybe making your contract completely useless.
-
Trèsintéressant! Pourriez-vousfournir unexemple?Very Interesting! Could you provide an example?
- 0
- 2019-03-12
- Rob
Un contrat de voiemises àniveaubénéficierait d'être capable d'acceptertouttypeet detransmettre au contrat d'applicationen coursbasé sur lamanière donttouttype analyse.Parexemple,une demandepeut êtreenvoyée à un contrat qui définit le contrat d'applicationen courset la logique serait contrôléepar ce contrat.Celapermettrait à une application d'avoir lemême contratet de choisir ce contrat choisir où la demandeestenvoyée.Existe-t-il une considérationpour untype ou unemanière que les contratspourraient êtremis àniveauet remplir cetteexigence?Sinon,y a-t-il une solution de contournement
Peut-être quetouttypeesttrop libéral,maisfaire un contratprendre
(paire chaîne (paire ... ... ... ...))))
etc ..et avoir le stockagemaintenir une adresseGénéraliser le contraten vue de lapréparation deméthodes supplémentaires se sentent comme un kilomètre.Jenoterai qu'une version de cettetechnique a été utilisée à UNIX,doncpeut-êtrepas aussimauvaise quepossible.