@@ -101,6 +101,14 @@ int magicVariableToID(std::string const& _name)
101101 return -36 ;
102102 else if (_name == " freezeExpireTime" )
103103 return -37 ;
104+ else if (_name == " withdrawreward" ) return -38 ;
105+ else if (_name == " vote" ) return -39 ;
106+ else if (_name == " rewardBalance" ) return -40 ;
107+ else if (_name == " isSrCandidate" ) return -41 ;
108+ else if (_name == " voteCount" ) return -42 ;
109+ else if (_name == " totalVoteCount" ) return -43 ;
110+ else if (_name == " receivedVoteCount" ) return -44 ;
111+ else if (_name == " usedVoteCount" ) return -45 ;
104112 else
105113 solAssert (false , " Unknown magic variable: \" " + _name + " \" ." );
106114}
@@ -223,6 +231,7 @@ inline vector<shared_ptr<MagicVariableDeclaration const>> constructMagicVariable
223231 FunctionType::Kind::FreezeExpireTime,
224232 false ,
225233 StateMutability::NonPayable)),
234+ magicVarDecl (" withdrawreward" , TypeProvider::function (strings{}, strings{" uint" }, FunctionType::Kind::WithdrawReward)),
226235 magicVarDecl (" tx" , TypeProvider::magic (MagicType::Kind::Transaction)),
227236 // Accepts a MagicType that can be any contract type or an Integer type and returns a
228237 // MagicType. The TypeChecker handles the correctness of the input and output types.
@@ -242,6 +251,13 @@ GlobalContext::GlobalContext(): m_magicVariables{constructMagicVariables()}
242251 addVerifyBurnProofMethod ();
243252 addVerifyTransferProofMethod ();
244253 addPedersenHashMethod ();
254+ addVoteMethod ();
255+ addRewardBalanceMethod ();
256+ addIsSRCandidateMethod ();
257+ addVoteCountMethod ();
258+ addTotalVoteCountMethod ();
259+ addReceivedVoteCountMethod ();
260+ addUsedVoteCountMethod ();
245261}
246262
247263void GlobalContext::addVerifyMintProofMethod () {
@@ -493,6 +509,204 @@ void GlobalContext::addValidateMultiSignMethod() {
493509 ));
494510}
495511
512+ void GlobalContext::addVoteMethod () {
513+ // bool vote(address[] memory addresses, unit256[] tronpowerlist)
514+ TypePointers parameterTypes;
515+
516+ parameterTypes.push_back (TypeProvider::array (DataLocation::Memory, TypeProvider::address ()));
517+ parameterTypes.push_back (TypeProvider::array (DataLocation::Memory, TypeProvider::uint256 ()));
518+
519+ TypePointers returnParameterTypes;
520+ returnParameterTypes.push_back (TypeProvider::boolean ());
521+ strings parameterNames;
522+ parameterNames.push_back (" srList" );
523+ parameterNames.push_back (" tronpowerList" );
524+ strings returnParameterNames;
525+ returnParameterNames.push_back (" ok" );
526+
527+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" vote" ), " vote" , TypeProvider::function (
528+ parameterTypes,
529+ returnParameterTypes,
530+ parameterNames,
531+ returnParameterNames,
532+ FunctionType::Kind::vote,
533+ false ,
534+ StateMutability::NonPayable,
535+ nullptr ,
536+ false ,
537+ false ,
538+ false ,
539+ false )
540+ ));
541+ }
542+
543+ void GlobalContext::addRewardBalanceMethod () {
544+ // uint rewardBalance()
545+ TypePointers parameterTypes;
546+ TypePointers returnParameterTypes;
547+ returnParameterTypes.push_back (TypeProvider::uint256 ());
548+ strings parameterNames;
549+ strings returnParameterNames;
550+ returnParameterNames.push_back (" result" );
551+
552+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" rewardBalance" ), " rewardBalance" , TypeProvider::function (
553+ parameterTypes,
554+ returnParameterTypes,
555+ parameterNames,
556+ returnParameterNames,
557+ FunctionType::Kind::rewardBalance,
558+ false ,
559+ StateMutability::View,
560+ nullptr ,
561+ false ,
562+ false ,
563+ false ,
564+ false )
565+ ));
566+ }
567+
568+ void GlobalContext::addIsSRCandidateMethod () {
569+ // bool isSrCandidate(address)
570+ TypePointers parameterTypes;
571+ parameterTypes.push_back (TypeProvider::address ());
572+
573+ TypePointers returnParameterTypes;
574+ returnParameterTypes.push_back (TypeProvider::boolean ());
575+ strings parameterNames;
576+ parameterNames.push_back (" address" );
577+ strings returnParameterNames;
578+ returnParameterNames.push_back (" ok" );
579+
580+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" isSrCandidate" ), " isSrCandidate" , TypeProvider::function (
581+ parameterTypes,
582+ returnParameterTypes,
583+ parameterNames,
584+ returnParameterNames,
585+ FunctionType::Kind::isSrCandidate,
586+ false ,
587+ StateMutability::View,
588+ nullptr ,
589+ false ,
590+ false ,
591+ false ,
592+ false )
593+ ));
594+ }
595+
596+ void GlobalContext::addVoteCountMethod () {
597+ // uint voteCount(address, address)
598+ TypePointers parameterTypes;
599+ parameterTypes.push_back (TypeProvider::address ());
600+ parameterTypes.push_back (TypeProvider::address ());
601+
602+ TypePointers returnParameterTypes;
603+ returnParameterTypes.push_back (TypeProvider::uint256 ());
604+ strings parameterNames;
605+ parameterNames.push_back (" address" );
606+ parameterNames.push_back (" address" );
607+ strings returnParameterNames;
608+ returnParameterNames.push_back (" result" );
609+
610+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" voteCount" ), " voteCount" , TypeProvider::function (
611+ parameterTypes,
612+ returnParameterTypes,
613+ parameterNames,
614+ returnParameterNames,
615+ FunctionType::Kind::voteCount,
616+ false ,
617+ StateMutability::View,
618+ nullptr ,
619+ false ,
620+ false ,
621+ false ,
622+ false )
623+ ));
624+ }
625+
626+ void GlobalContext::addTotalVoteCountMethod () {
627+ // uint totalVoteCount(address)
628+ TypePointers parameterTypes;
629+ parameterTypes.push_back (TypeProvider::address ());
630+
631+ TypePointers returnParameterTypes;
632+ returnParameterTypes.push_back (TypeProvider::uint256 ());
633+ strings parameterNames;
634+ parameterNames.push_back (" address" );
635+ strings returnParameterNames;
636+ returnParameterNames.push_back (" result" );
637+
638+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" totalVoteCount" ), " totalVoteCount" , TypeProvider::function (
639+ parameterTypes,
640+ returnParameterTypes,
641+ parameterNames,
642+ returnParameterNames,
643+ FunctionType::Kind::totalVoteCount,
644+ false ,
645+ StateMutability::View,
646+ nullptr ,
647+ false ,
648+ false ,
649+ false ,
650+ false )
651+ ));
652+ }
653+
654+ void GlobalContext::addReceivedVoteCountMethod () {
655+ // uint receivedVoteCount(address)
656+ TypePointers parameterTypes;
657+ parameterTypes.push_back (TypeProvider::address ());
658+
659+ TypePointers returnParameterTypes;
660+ returnParameterTypes.push_back (TypeProvider::uint256 ());
661+ strings parameterNames;
662+ parameterNames.push_back (" address" );
663+ strings returnParameterNames;
664+ returnParameterNames.push_back (" result" );
665+
666+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" receivedVoteCount" ), " receivedVoteCount" , TypeProvider::function (
667+ parameterTypes,
668+ returnParameterTypes,
669+ parameterNames,
670+ returnParameterNames,
671+ FunctionType::Kind::receivedVoteCount,
672+ false ,
673+ StateMutability::View,
674+ nullptr ,
675+ false ,
676+ false ,
677+ false ,
678+ false )
679+ ));
680+ }
681+
682+ void GlobalContext::addUsedVoteCountMethod () {
683+ // uint usedVoteCount(address)
684+ TypePointers parameterTypes;
685+ parameterTypes.push_back (TypeProvider::address ());
686+
687+ TypePointers returnParameterTypes;
688+ returnParameterTypes.push_back (TypeProvider::uint256 ());
689+ strings parameterNames;
690+ parameterNames.push_back (" address" );
691+ strings returnParameterNames;
692+ returnParameterNames.push_back (" result" );
693+
694+ m_magicVariables.push_back (make_shared<MagicVariableDeclaration>(magicVariableToID (" usedVoteCount" ), " usedVoteCount" , TypeProvider::function (
695+ parameterTypes,
696+ returnParameterTypes,
697+ parameterNames,
698+ returnParameterNames,
699+ FunctionType::Kind::usedVoteCount,
700+ false ,
701+ StateMutability::View,
702+ nullptr ,
703+ false ,
704+ false ,
705+ false ,
706+ false )
707+ ));
708+ }
709+
496710void GlobalContext::setCurrentContract (ContractDefinition const & _contract)
497711{
498712 m_currentContract = &_contract;
0 commit comments