Journal de développement des smart contracts Rust (11) : Analyse du mécanisme de proposition de la DAO Sputnik
Sputnik-DAO, en tant qu'infrastructure du protocole NEAR, pousse l'écosystème NEAR vers une direction décentralisée. Actuellement, cette plateforme a facilité de nombreuses communautés autonomes de projets NEAR, tout en offrant une solution complète, flexible et efficace pour la gouvernance des décisions communautaires.
Sputnikdaov2 est un smart contracts utilisé pour les votes de gouvernance de la communauté Sputnik-DAO. Cet article présentera les concepts clés de ce contrat : la proposition (Proposal), et expliquera les modes de gouvernance de la communauté DAO liés à la proposition (Policy).
1. Initiation de la proposition
Chaque membre de la communauté Sputnik-DAO peut exprimer son opinion ou soumettre une proposition concernant la gouvernance ou la gestion du projet. Ensuite, chaque membre de la communauté qui détient des actions dans le DAO peut examiner et voter sur cette proposition. En d'autres termes, chaque membre de Sputnik-DAO peut influencer l'avenir du projet en votant sur les propositions des autres ou en initiant de nouvelles propositions de gestion.
D'un point de vue contractuel, les membres de la communauté DAO peuvent appeler la méthode add_proposal() du contrat sputnikdaov2 pour soumettre une nouvelle proposition.
À ce moment, le proposant doit fournir les détails de la proposition (ProposalInput) :
Description text de la proposition (Description). Cette information sera affichée publiquement sur le front-end de la page d'accueil de Sputnik-DAO, aidant les membres de la communauté à comprendre l'objectif et la signification de cette proposition.
Type de proposition (kind). Le proposeur doit sélectionner le type d'avis en fonction de la gestion du projet (, par exemple, si l'appel à une fonction clé de contrat est nécessaire, le type FunctionCall doit être choisi, et pour le transfert de fonds de projet de contrat, le type Transfer doit être sélectionné, etc. ).
Ces informations ProposalInput seront transmises en tant que paramètres à la méthode add_proposal(), qui effectuera les vérifications et le traitement nécessaires, et générera une proposition (Proposal) avec des informations d'initialisation complètes. Finalement, cette proposition sera liée à un identifiant de proposition unique et sera ajoutée au mappage Contract.proposals maintenu globalement par le contrat Sputnik-DAO sous la forme <key, value=""> dans le pool de propositions (.
Il est important de noter qu'il existe le concept de dépôt de proposition )proposal_bond( dans le Sputnik-DAO, ce dépôt sera géré selon le modèle de gouvernance spécifique de la communauté Sputnik-DAO )Policy(. Le contrat exige que le proposeur mette en gage une certaine quantité de jetons NEAR comme garantie pour la nouvelle proposition lors de l'appel de la méthode add_proposal)(. Ce dépôt sera remboursé au proposeur en appelant la fonction interne du contrat internal_return_bonds)( lorsque le vote de la communauté sur la proposition se termine normalement ) en faveur ou contre (.
Toute proposition standard dans Sputnik-DAO peut passer par plusieurs états ) le nouvel état de proposition est initialisé à InProgress (:
InProgress: vote en cours
Approuvé : La proposition a été adoptée
Rejeté : proposition rejetée
Retiré : la proposition a été retirée
Échoué : échec de l'exécution de la proposition
Expiré : La proposition a expiré
Les changements d'état des propositions dans le pool de propositions sont pilotés par la méthode act_proposal)( du contrat. Les membres du Sputnik-DAO peuvent appeler la méthode act_proposal)( pour exécuter des opérations sur une proposition spécifique ) en spécifiant l'id (.
Pour les propositions en état InProgress, les membres de la communauté DAO peuvent appeler act_proposal)( pour exécuter des opérations de vote spécifiques:
Action::VoteApprove:表赞成
Action::VoteReject:表反对
Action::VoteRemove: estime que cette proposition n'a pas de signification pratique et doit être supprimée
Selon la mise en œuvre, après l'appel interne de la fonction update_votes)(, le programme appellera activement policy.proposal_status)( pour effectuer le travail de vote. Pour les propositions qui atteignent le seuil de vote, l'état de la proposition sera modifié en conséquence.
Changement après :
Si l'état de la proposition est Approuvée, alors la proposition sera exécutée en appelant internal_execute_proposal)(;
Si l'état de la proposition est Rejetée ou Retirée, la proposition sera suivie d'opérations de clôture en appelant internal_reject_proposal)(.
Il convient de mentionner que la différence entre les états Rejected et Removed est la suivante : une proposition déterminée comme Removed sera directement retirée de la piscine des propositions, et le dépôt initial ne sera pas remboursé au proposant. En revanche, pour une proposition dans l'état Rejected, celle-ci restera dans la piscine des propositions et le dépôt correspondant sera remboursé.
Si une proposition a le statut Approved après la fin du vote, la méthode de contrat act_proposal)( continuera alors à appeler la fonction internal_execute_proposal)( pour exécuter le contenu décisionnel inclus dans la proposition.
Les types de propositions pris en charge par Sputnik-DAO incluent : ChangeConfig, ChangePolicy, AddMemberToRole, RemoveMemberFromRole, FunctionCall, UpgradeSelf, UpgradeRemote, Transfer, SetStakingContract, AddBounty, BountyDone, Vote, FactoryInfoUpdate, ChangePolicyAddOrUpdateRole, ChangePolicyRemoveRole, ChangePolicyUpdateDefaultVotePolicy, ChangePolicyUpdateParameters, etc.
Les deux types de processus de traitement des propositions typiques sont présentés ci-dessous :
) 3.1 Exécution de la fonction de contrat proposition###ProposalKind::FunctionCall(
Les propositions de type FunctionCall sont passées lorsque le proposeur appelle la méthode add_proposal)(, et les opérations de fonction spécifiques que cette proposition doit exécuter sont transmises via le paramètre ProposalInput)actions(. Les contrats NEAR permettent de lier plusieurs appels de fonction consécutifs dans une seule Promise. Ainsi, les actions initialement définies par le proposeur peuvent contenir plusieurs objets ActionCall, chacun pouvant spécifier le nom de la méthode de contrat correspondante ainsi que les paramètres de la méthode, etc.
Sputnik-DAO a réalisé l'exécution des propositions de type fonction de contrat en utilisant des actions de lot Promise.
) 3.2 Proposition de transfert de fonds de contrat ### ProposalKind::Transfer (
Après que le projet de smart contracts NEAR ait fonctionné pendant un certain temps, le compte de contrat lui-même a peut-être accumulé un nombre important de jetons fongibles ), y compris le jeton natif NEAR ou d'autres jetons conformes à la norme NEP-141 (.
À ce moment-là, les membres de la communauté Sputnik-DAO peuvent regrouper ces jetons sur le compte receiver_id spécifié en soumettant une proposition de transfert de fonds de contrat. internal_execute_proposal)( met également en œuvre un point d'entrée correspondant pour traiter les propositions dont ProposalKind est Transfer.
La branche de traitement sous-jacente appellera la fonction internal_payout)(, pour réaliser des opérations de transfert pour différents types de Fungible Token ainsi que différents types de receiver_id) EOA ou comptes de contrat(.
Cet article présente les concepts clés du contrat Sputnik DAO - la proposition )Proposal(, tout en expliquant brièvement comment créer de nouvelles propositions et voter pour leur exécution dans le Sputnik DAO, ainsi que les règles de changement des états de base des propositions connexes )Status(.
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
18 J'aime
Récompense
18
7
Reposter
Partager
Commentaire
0/400
ThatsNotARugPull
· 07-26 11:04
C'est trop officiel, disons les choses clairement.
Voir l'originalRépondre0
BlockDetective
· 07-26 08:11
Near semble assez parfumé
Voir l'originalRépondre0
DeFiVeteran
· 07-23 11:35
Soumettez une proposition pour tester les eaux !
Voir l'originalRépondre0
fren_with_benefits
· 07-23 11:17
Ouais ouais ouais, putain, ce Sputnik est vraiment utile.
Voir l'originalRépondre0
UnluckyMiner
· 07-23 11:06
Vraie vote, faux gouvernance.
Voir l'originalRépondre0
LayerHopper
· 07-23 11:06
Je pense que ça va, mais c'est juste trop compliqué.
Explication du mécanisme de proposition de Sputnik DAO : analyse complète du processus, de l'initiation à l'exécution.
Journal de développement des smart contracts Rust (11) : Analyse du mécanisme de proposition de la DAO Sputnik
Sputnik-DAO, en tant qu'infrastructure du protocole NEAR, pousse l'écosystème NEAR vers une direction décentralisée. Actuellement, cette plateforme a facilité de nombreuses communautés autonomes de projets NEAR, tout en offrant une solution complète, flexible et efficace pour la gouvernance des décisions communautaires.
Sputnikdaov2 est un smart contracts utilisé pour les votes de gouvernance de la communauté Sputnik-DAO. Cet article présentera les concepts clés de ce contrat : la proposition (Proposal), et expliquera les modes de gouvernance de la communauté DAO liés à la proposition (Policy).
1. Initiation de la proposition
Chaque membre de la communauté Sputnik-DAO peut exprimer son opinion ou soumettre une proposition concernant la gouvernance ou la gestion du projet. Ensuite, chaque membre de la communauté qui détient des actions dans le DAO peut examiner et voter sur cette proposition. En d'autres termes, chaque membre de Sputnik-DAO peut influencer l'avenir du projet en votant sur les propositions des autres ou en initiant de nouvelles propositions de gestion.
D'un point de vue contractuel, les membres de la communauté DAO peuvent appeler la méthode add_proposal() du contrat sputnikdaov2 pour soumettre une nouvelle proposition.
À ce moment, le proposant doit fournir les détails de la proposition (ProposalInput) :
Description text de la proposition (Description). Cette information sera affichée publiquement sur le front-end de la page d'accueil de Sputnik-DAO, aidant les membres de la communauté à comprendre l'objectif et la signification de cette proposition.
Type de proposition (kind). Le proposeur doit sélectionner le type d'avis en fonction de la gestion du projet (, par exemple, si l'appel à une fonction clé de contrat est nécessaire, le type FunctionCall doit être choisi, et pour le transfert de fonds de projet de contrat, le type Transfer doit être sélectionné, etc. ).
Ces informations ProposalInput seront transmises en tant que paramètres à la méthode add_proposal(), qui effectuera les vérifications et le traitement nécessaires, et générera une proposition (Proposal) avec des informations d'initialisation complètes. Finalement, cette proposition sera liée à un identifiant de proposition unique et sera ajoutée au mappage Contract.proposals maintenu globalement par le contrat Sputnik-DAO sous la forme <key, value=""> dans le pool de propositions (.
Il est important de noter qu'il existe le concept de dépôt de proposition )proposal_bond( dans le Sputnik-DAO, ce dépôt sera géré selon le modèle de gouvernance spécifique de la communauté Sputnik-DAO )Policy(. Le contrat exige que le proposeur mette en gage une certaine quantité de jetons NEAR comme garantie pour la nouvelle proposition lors de l'appel de la méthode add_proposal)(. Ce dépôt sera remboursé au proposeur en appelant la fonction interne du contrat internal_return_bonds)( lorsque le vote de la communauté sur la proposition se termine normalement ) en faveur ou contre (.
![])https://img-cdn.gateio.im/webp-social/moments-84ee9ca630a4cdcdb0d2eb63450a7cf4.webp(
2. État de la proposition
Toute proposition standard dans Sputnik-DAO peut passer par plusieurs états ) le nouvel état de proposition est initialisé à InProgress (:
Les changements d'état des propositions dans le pool de propositions sont pilotés par la méthode act_proposal)( du contrat. Les membres du Sputnik-DAO peuvent appeler la méthode act_proposal)( pour exécuter des opérations sur une proposition spécifique ) en spécifiant l'id (.
Pour les propositions en état InProgress, les membres de la communauté DAO peuvent appeler act_proposal)( pour exécuter des opérations de vote spécifiques:
Selon la mise en œuvre, après l'appel interne de la fonction update_votes)(, le programme appellera activement policy.proposal_status)( pour effectuer le travail de vote. Pour les propositions qui atteignent le seuil de vote, l'état de la proposition sera modifié en conséquence.
Changement après :
Il convient de mentionner que la différence entre les états Rejected et Removed est la suivante : une proposition déterminée comme Removed sera directement retirée de la piscine des propositions, et le dépôt initial ne sera pas remboursé au proposant. En revanche, pour une proposition dans l'état Rejected, celle-ci restera dans la piscine des propositions et le dépôt correspondant sera remboursé.
![])https://img-cdn.gateio.im/webp-social/moments-427716593b21fa32b47855ceb5e101fc.webp(
3. Exécution de la proposition
Si une proposition a le statut Approved après la fin du vote, la méthode de contrat act_proposal)( continuera alors à appeler la fonction internal_execute_proposal)( pour exécuter le contenu décisionnel inclus dans la proposition.
Les types de propositions pris en charge par Sputnik-DAO incluent : ChangeConfig, ChangePolicy, AddMemberToRole, RemoveMemberFromRole, FunctionCall, UpgradeSelf, UpgradeRemote, Transfer, SetStakingContract, AddBounty, BountyDone, Vote, FactoryInfoUpdate, ChangePolicyAddOrUpdateRole, ChangePolicyRemoveRole, ChangePolicyUpdateDefaultVotePolicy, ChangePolicyUpdateParameters, etc.
Les deux types de processus de traitement des propositions typiques sont présentés ci-dessous :
) 3.1 Exécution de la fonction de contrat proposition###ProposalKind::FunctionCall(
Les propositions de type FunctionCall sont passées lorsque le proposeur appelle la méthode add_proposal)(, et les opérations de fonction spécifiques que cette proposition doit exécuter sont transmises via le paramètre ProposalInput)actions(. Les contrats NEAR permettent de lier plusieurs appels de fonction consécutifs dans une seule Promise. Ainsi, les actions initialement définies par le proposeur peuvent contenir plusieurs objets ActionCall, chacun pouvant spécifier le nom de la méthode de contrat correspondante ainsi que les paramètres de la méthode, etc.
Sputnik-DAO a réalisé l'exécution des propositions de type fonction de contrat en utilisant des actions de lot Promise.
) 3.2 Proposition de transfert de fonds de contrat ### ProposalKind::Transfer (
Après que le projet de smart contracts NEAR ait fonctionné pendant un certain temps, le compte de contrat lui-même a peut-être accumulé un nombre important de jetons fongibles ), y compris le jeton natif NEAR ou d'autres jetons conformes à la norme NEP-141 (.
À ce moment-là, les membres de la communauté Sputnik-DAO peuvent regrouper ces jetons sur le compte receiver_id spécifié en soumettant une proposition de transfert de fonds de contrat. internal_execute_proposal)( met également en œuvre un point d'entrée correspondant pour traiter les propositions dont ProposalKind est Transfer.
La branche de traitement sous-jacente appellera la fonction internal_payout)(, pour réaliser des opérations de transfert pour différents types de Fungible Token ainsi que différents types de receiver_id) EOA ou comptes de contrat(.
![])https://img-cdn.gateio.im/webp-social/moments-ef0b959c42e1f5fc6263cd4a86fd078e.webp(
4. Résumé
Cet article présente les concepts clés du contrat Sputnik DAO - la proposition )Proposal(, tout en expliquant brièvement comment créer de nouvelles propositions et voter pour leur exécution dans le Sputnik DAO, ainsi que les règles de changement des états de base des propositions connexes )Status(.
![])https://img-cdn.gateio.im/webp-social/moments-eb73d5e15f6161f0a4b442cd4b99a91e.webp(</key,>