package Ġcom . rar ible . protocol . nft . core . service Ċ Ċ import Ġcom . rar ible . ethereum . domain . Eth UInt 2 5 6 Ċ import Ġcom . rar ible . protocol . contracts . external . roy alt ies . IR oy alt ies Provider Ċ import Ġcom . rar ible . protocol . nft . core . configuration . N ft Indexer Properties Ċ import Ġcom . rar ible . protocol . nft . core . model . Part Ċ import Ġcom . rar ible . protocol . nft . core . model . Ro y alty Ċ import Ġcom . rar ible . protocol . nft . core . repository . Ro y alty Repository Ċ import Ġio . da onom ic . rpc . Rpc Code Exception Ċ import Ġkotlinx . coroutines . reactive . await First OrNull Ċ import Ġkotlinx . coroutines . reactive . await Single Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġscale ther . domain . Address Ċ import Ġscale ther . transaction . Mono Transaction Sender Ċ Ċ @ Service Ċ class ĠRo y alty Service ( ĊĠĠĠ Ġprivate Ġval Ġsender : ĠMono Transaction Sender , ĊĠĠĠ Ġprivate Ġval Ġn ft Indexer Properties : ĠN ft Indexer Properties , ĊĠĠĠ Ġprivate Ġval Ġro y alty Repository : ĠRo y alty Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠTODO : Ġhandle Ġthe Ġtwo Ġcases Ġdifferently : ĊĠĠĠ Ġ// ĠĠ 1 ) Ġro y alt ies Ġare Ġnot Ġyet Ġset Ġfor Ġthe Ġitem Ġ( this Ġis Ġthe Ġcase Ġwhile Ġthe Ġitem Ġhasn 't Ġbeen Ġmint ed Ġyet Ġ- Ġpending Ġtransaction ) ĊĠĠĠ Ġ// ĠĠ 2 ) Ġitem Ġdoesn 't Ġhave Ġany Ġro y alt ies Ġat Ġall ĊĠĠĠ Ġ// Ġ ĠCurrently , Ġwe Ġrequest Ġro y alt ies Ġfrom Ġthe Ġcontract Ġin Ġboth Ġcases . ĊĠĠĠ Ġsuspend Ġfun Ġget Ro y alty Deprecated ( address : ĠAddress , Ġtoken Id : ĠE th UInt 2 5 6 ): ĠList < Part > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcached Ro y alt ies Ġ= Ġro y alty Repository . findBy Token And Id ( address , Ġtoken Id ). await First OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ro y alt ies Ġ!= Ġnull Ġ&& Ġcached Ro y alt ies . roy alty . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcached Ro y alt ies . roy alty ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info (" Request ing Ġro y alt ies Ġ$ address :$ tokenId ") ĊĠĠĠĠĠĠĠ Ġval Ġro y alt ies Ġ= ĠgetBy Token ( address , Ġtoken Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( roy alt ies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġro y alty Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRo y alty ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Ġ= Ġaddress , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Id Ġ= Ġtoken Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġro y alty Ġ= Ġro y alt ies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). await Single (). roy alty ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetBy Token ( address : ĠAddress , Ġtoken Id : ĠE th UInt 2 5 6 ): ĠList < Part > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠI Ro y alt ies Provider ( Address . apply ( nft Indexer Properties . roy alty Registry Address ), Ġsender ) ĊĠĠĠĠĠĠĠ Ġprovider . get Ro y alt ies ( address , Ġtoken Id . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. call (). await Single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPart ( it ._ 1 , Ġit ._ 2 . intValue Exact ()) Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġlogger . info (" Got Ġro y alt ies Ġfor Ġ$ address :$ tokenId : Ġ$ it ") Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠRpc Code Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ro y alt ies Provider Ġdoes Ġnot Ġknow Ġabout Ġro y alt ies Ġfor Ġ$ address :$ tokenId , Ġsee ĠJira ĠRPC - 1 0 9 , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" returned Ġ${ e . message () }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Failed Ġto Ġrequest Ġro y alt ies Ġfor Ġ$ address :$ tokenId ", Ġe ) ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Ro y alty Service :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ