@@ -153,8 +153,7 @@ func (t TxInfoV3) ToPlutusData() data.PlutusData {
153153		toPlutusData (t .Outputs ),
154154		data .NewInteger (new (big.Int ).SetUint64 (t .Fee )),
155155		t .Mint .ToPlutusData (),
156- 		// TODO: certs 
157- 		toPlutusData ([]any {}),
156+ 		certificatesToPlutusData (t .Certificates ),
158157		toPlutusData (t .Withdrawals ),
159158		t .ValidRange .ToPlutusData (),
160159		toPlutusData (t .Signatories ),
@@ -165,10 +164,8 @@ func (t TxInfoV3) ToPlutusData() data.PlutusData {
165164		data .NewMap ([][2 ]data.PlutusData {}),
166165		// TODO: proposal procedures 
167166		toPlutusData ([]any {}),
168- 		// TODO: current treasury amount 
169- 		data .NewConstr (1 ),
170- 		// TODO: treasury donation 
171- 		data .NewConstr (1 ),
167+ 		t .CurrentTreasuryAmount .ToPlutusData (),
168+ 		t .TreasuryDonation .ToPlutusData (),
172169	)
173170}
174171
@@ -187,7 +184,7 @@ func NewTxInfoV3FromTransaction(
187184			resolvedInputs ,
188185			inputs ,
189186			* assetMint ,
190- 			// TODO: certificates 
187+ 			tx . Certificates (), 
191188			tx .Withdrawals (),
192189			// TODO: proposal procedures 
193190			// TODO: votes 
@@ -207,15 +204,20 @@ func NewTxInfoV3FromTransaction(
207204			tx .TTL (),
208205			tx .ValidityIntervalStart (),
209206		},
210- 		Withdrawals : tx .Withdrawals (),
211- 		Signatories : signatoriesInfo (tx .RequiredSigners ()),
212- 		Redeemers :   redeemers ,
213- 		Data :        tmpData ,
214- 		Id :          tx .Hash (),
207+ 		Certificates : tx .Certificates (),
208+ 		Withdrawals :  tx .Withdrawals (),
209+ 		Signatories :  signatoriesInfo (tx .RequiredSigners ()),
210+ 		Redeemers :    redeemers ,
211+ 		Data :         tmpData ,
212+ 		Id :           tx .Hash (),
215213		// TODO: Votes 
216214		// TODO: ProposalProcedures 
217- 		// TODO: CurrentTreasuryAmount 
218- 		// TODO: TreasuryDonation 
215+ 	}
216+ 	if  amt  :=  tx .CurrentTreasuryValue (); amt  >  0  {
217+ 		ret .CurrentTreasuryAmount .Value  =  amt 
218+ 	}
219+ 	if  amt  :=  tx .Donation (); amt  >  0  {
220+ 		ret .TreasuryDonation .Value  =  amt 
219221	}
220222	return  ret 
221223}
@@ -396,3 +398,144 @@ func signatoriesInfo(
396398	)
397399	return  tmp 
398400}
401+ 
402+ func  certificatesToPlutusData (
403+ 	certificates  []lcommon.Certificate ,
404+ ) data.PlutusData  {
405+ 	tmpCerts  :=  make ([]data.PlutusData , len (certificates ))
406+ 	for  idx , cert  :=  range  certificates  {
407+ 		tmpCerts [idx ] =  certificateToPlutusData (cert )
408+ 	}
409+ 	return  data .NewList (tmpCerts ... )
410+ }
411+ 
412+ func  certificateToPlutusData (
413+ 	certificate  lcommon.Certificate ,
414+ ) data.PlutusData  {
415+ 	switch  c  :=  certificate .(type ) {
416+ 	case  * lcommon.StakeRegistrationCertificate :
417+ 		return  data .NewConstr (
418+ 			0 ,
419+ 			c .StakeCredential .ToPlutusData (),
420+ 			data .NewConstr (1 ),
421+ 		)
422+ 	case  * lcommon.RegistrationCertificate :
423+ 		return  data .NewConstr (
424+ 			0 ,
425+ 			c .StakeCredential .ToPlutusData (),
426+ 			data .NewConstr (1 ),
427+ 		)
428+ 	case  * lcommon.StakeDeregistrationCertificate :
429+ 		return  data .NewConstr (
430+ 			1 ,
431+ 			c .StakeCredential .ToPlutusData (),
432+ 			data .NewConstr (1 ),
433+ 		)
434+ 	case  * lcommon.DeregistrationCertificate :
435+ 		return  data .NewConstr (
436+ 			1 ,
437+ 			c .StakeCredential .ToPlutusData (),
438+ 			data .NewConstr (1 ),
439+ 		)
440+ 	case  * lcommon.StakeDelegationCertificate :
441+ 		return  data .NewConstr (
442+ 			2 ,
443+ 			c .StakeCredential .ToPlutusData (),
444+ 			data .NewConstr (
445+ 				0 ,
446+ 				c .PoolKeyHash .ToPlutusData (),
447+ 			),
448+ 		)
449+ 	case  * lcommon.VoteDelegationCertificate :
450+ 		return  data .NewConstr (
451+ 			2 ,
452+ 			c .StakeCredential .ToPlutusData (),
453+ 			data .NewConstr (
454+ 				1 ,
455+ 				c .Drep .ToPlutusData (),
456+ 			),
457+ 		)
458+ 	case  * lcommon.StakeVoteDelegationCertificate :
459+ 		return  data .NewConstr (
460+ 			2 ,
461+ 			c .StakeCredential .ToPlutusData (),
462+ 			data .NewConstr (
463+ 				2 ,
464+ 				toPlutusData (c .PoolKeyHash ),
465+ 				c .Drep .ToPlutusData (),
466+ 			),
467+ 		)
468+ 	case  * lcommon.StakeRegistrationDelegationCertificate :
469+ 		return  data .NewConstr (
470+ 			3 ,
471+ 			c .StakeCredential .ToPlutusData (),
472+ 			data .NewConstr (
473+ 				0 ,
474+ 				toPlutusData (c .PoolKeyHash ),
475+ 			),
476+ 			data .NewInteger (big .NewInt (c .Amount )),
477+ 		)
478+ 	case  * lcommon.VoteRegistrationDelegationCertificate :
479+ 		return  data .NewConstr (
480+ 			3 ,
481+ 			c .StakeCredential .ToPlutusData (),
482+ 			data .NewConstr (
483+ 				1 ,
484+ 				c .Drep .ToPlutusData (),
485+ 			),
486+ 			data .NewInteger (big .NewInt (c .Amount )),
487+ 		)
488+ 	case  * lcommon.StakeVoteRegistrationDelegationCertificate :
489+ 		return  data .NewConstr (
490+ 			3 ,
491+ 			c .StakeCredential .ToPlutusData (),
492+ 			data .NewConstr (
493+ 				2 ,
494+ 				c .PoolKeyHash .ToPlutusData (),
495+ 				c .Drep .ToPlutusData (),
496+ 			),
497+ 			data .NewInteger (big .NewInt (c .Amount )),
498+ 		)
499+ 	case  * lcommon.RegistrationDrepCertificate :
500+ 		return  data .NewConstr (
501+ 			4 ,
502+ 			c .DrepCredential .ToPlutusData (),
503+ 			data .NewInteger (big .NewInt (c .Amount )),
504+ 		)
505+ 	case  * lcommon.UpdateDrepCertificate :
506+ 		return  data .NewConstr (
507+ 			5 ,
508+ 			c .DrepCredential .ToPlutusData (),
509+ 		)
510+ 	case  * lcommon.DeregistrationDrepCertificate :
511+ 		return  data .NewConstr (
512+ 			6 ,
513+ 			c .DrepCredential .ToPlutusData (),
514+ 			data .NewInteger (big .NewInt (c .Amount )),
515+ 		)
516+ 	case  * lcommon.PoolRegistrationCertificate :
517+ 		return  data .NewConstr (
518+ 			7 ,
519+ 			toPlutusData (c .Operator ),
520+ 			toPlutusData (c .VrfKeyHash ),
521+ 		)
522+ 	case  * lcommon.PoolRetirementCertificate :
523+ 		return  data .NewConstr (
524+ 			8 ,
525+ 			toPlutusData (c .PoolKeyHash ),
526+ 			data .NewInteger (new (big.Int ).SetUint64 (c .Epoch )),
527+ 		)
528+ 	case  * lcommon.AuthCommitteeHotCertificate :
529+ 		return  data .NewConstr (
530+ 			9 ,
531+ 			c .ColdCredential .ToPlutusData (),
532+ 			c .HotCredential .ToPlutusData (),
533+ 		)
534+ 	case  * lcommon.ResignCommitteeColdCertificate :
535+ 		return  data .NewConstr (
536+ 			10 ,
537+ 			c .ColdCredential .ToPlutusData (),
538+ 		)
539+ 	}
540+ 	return  nil 
541+ }
0 commit comments