SNX stakers (aka minters, aka issuers) get staking rewards each week, in the form of sUSD trading fees and SNX inflationary rewards (see incentives for more information).
Note: Synthetix uses a proxy system. The ABI of the underlying Synthetix FeePool contract you need is FeePool. Learn more about how proxies work by visiting the overview page.
const{SynthetixJs}=require('synthetix-js');constprivateKey='0x'+'1'.repeat(64);// don't actually put a private key in code obviously// parameters: default provider, default networkId, private key as a stringconstnetworkId=3;// ropsten, (use 1 for mainnet)constsigner=newSynthetixJs.signers.PrivateKey(null,networkId,privateKey);constsnxjs=newSynthetixJs({signer,networkId});(async()=>{try{// send transactionconsttxn=awaitsnxjs.FeePool.claimFees();console.log('hash is mining',txn.hash);// wait for miningawaittxn.wait();// fetch logs of transactionconst{logs}=awaitsigner.provider.getTransactionReceipt(txn.hash);// show themconsole.log(JSON.stringify(logs,null,'\t'));}catch(err){console.log('Error',err);}})();
constsynthetix=require('synthetix');// nodejsconstethers=require('ethers');// nodejs// or using ES modules:// import synthetix from 'synthetix';// import ethers from 'ethers';constnetwork='ropsten';constprovider=ethers.getDefaultProvider(network==='mainnet'?'homestead':network);const{abi}=synthetix.getSource({network,contract:'FeePool',});const{address}=synthetix.getTarget({network,contract:'ProxyFeePool',});constprivateKey='0x'+'1'.repeat(64);// don't actually put a private key in code obviouslyconstsigner=newethers.Wallet(privateKey).connect(provider);// see https://docs.ethers.io/ethers.js/html/api-contract.html#connecting-to-existing-contractsconstFeePool=newethers.Contract(address,abi,signer);(async()=>{try{// send transactionconsttxn=awaitFeePool.claimFees();// wait for miningawaittxn.wait();// fetch logs of transactionconst{logs}=awaitprovider.getTransactionReceipt(txn.hash);// displayconsole.log(JSON.stringify(logs,null,'\t'));}catch(err){console.log('Error',err);}})();
pragma solidity0.5.16;import"synthetix/contracts/interfaces/IAddressResolver.sol";import"synthetix/contracts/interfaces/IFeePool.sol";contractMyContract{// This should be instantiated with our ReadProxyAddressResolver// it's a ReadProxy that won't change, so safe to code it here without a setter// see https://docs.synthetix.io/addresses for addresses in mainnet and testnetsIAddressResolverpublicsynthetixResolver;constructor(IAddressResolver_snxResolver)public{synthetixResolver=_snxResolver;}functionsynthetixClaim()external{IFeePoolfeePool=synthetixResolver.getAddress("FeePool");require(feePool!=address(0),"FeePool is missing from Synthetix resolver");// Claim as msg.sender = address(MyContractd)feePool.claimFees();}functionsynthetixClaimOnBehalf(addressuser)external{IFeePoolfeePool=synthetixResolver.getAddress("FeePool");require(feePool!=address(0),"FeePool is missing from Synthetix resolver");// Note: this will fail if `DelegateApprovals.approveClaimOnBehalf(address(MyContract))` has// not yet been invoked by the `user`feePool.claimOnBehalf(user);}}