@@ -38,6 +38,39 @@ var MainNetParams = chaincfg.Params{
3838 Name : "mainnet" ,
3939}
4040
41+ const (
42+ lbrycrdMainPubkeyPrefix = byte (85 )
43+ lbrycrdMainScriptPrefix = byte (122 )
44+ lbrycrdTestnetPubkeyPrefix = byte (111 )
45+ lbrycrdTestnetScriptPrefix = byte (196 )
46+ lbrycrdRegtestPubkeyPrefix = byte (111 )
47+ lbrycrdRegtestScriptPrefix = byte (196 )
48+
49+ LbrycrdMain = "lbrycrd_main"
50+ LbrycrdTestnet = "lbrycrd_testnet"
51+ LbrycrdRegtest = "lbrycrd_regtest"
52+ )
53+
54+ var mainNetParams = chaincfg.Params {
55+ PubKeyHashAddrID : lbrycrdMainPubkeyPrefix ,
56+ ScriptHashAddrID : lbrycrdMainScriptPrefix ,
57+ PrivateKeyID : 0x1c ,
58+ }
59+
60+ var testNetParams = chaincfg.Params {
61+ PubKeyHashAddrID : lbrycrdTestnetPubkeyPrefix ,
62+ ScriptHashAddrID : lbrycrdTestnetScriptPrefix ,
63+ PrivateKeyID : 0x1c ,
64+ }
65+
66+ var regTestNetParams = chaincfg.Params {
67+ PubKeyHashAddrID : lbrycrdRegtestPubkeyPrefix ,
68+ ScriptHashAddrID : lbrycrdRegtestScriptPrefix ,
69+ PrivateKeyID : 0x1c ,
70+ }
71+
72+ var ChainParamsMap = map [string ]chaincfg.Params {LbrycrdMain : mainNetParams , LbrycrdTestnet : testNetParams , LbrycrdRegtest : regTestNetParams }
73+
4174func init () {
4275 // Register lbrycrd network
4376 err := chaincfg .Register (& MainNetParams )
@@ -288,3 +321,52 @@ func (c *Client) CreateChannel(name string, amount float64) (*c.ClaimHelper, *bt
288321
289322 return channel , key , nil
290323}
324+
325+ func (c * Client ) SupportClaim (name , claimID , address , blockchainName string , claimAmount float64 ) (* chainhash.Hash , error ) {
326+ const DefaultFeePerSupport = float64 (0.0001 )
327+ unspentResults , err := c .ListUnspentMin (1 )
328+ if err != nil {
329+ return nil , errors .Err (err )
330+ }
331+
332+ finder := newOutputFinder (unspentResults )
333+ outputs , err := finder .nextBatch (claimAmount + DefaultFeePerSupport )
334+ if err != nil {
335+ return nil , err
336+ }
337+ if len (outputs ) == 0 {
338+ return nil , errors .Err ("Not enough spendable outputs to create transaction" )
339+ }
340+ inputs := make ([]btcjson.TransactionInput , len (outputs ))
341+
342+ var totalInputSpend float64
343+ for i , output := range outputs {
344+ inputs [i ] = btcjson.TransactionInput {Txid : output .TxID , Vout : output .Vout }
345+ totalInputSpend = totalInputSpend + output .Amount
346+ }
347+
348+ change := totalInputSpend - claimAmount - DefaultFeePerSupport
349+ rawTx , err := c .CreateBaseRawTx (inputs , change )
350+ if err != nil {
351+ return nil , err
352+ }
353+ chainParams , ok := ChainParamsMap [blockchainName ]
354+ if ! ok {
355+ return nil , errors .Err ("invalid blockchain name %s" , blockchainName )
356+ }
357+ decodedAddress , err := DecodeAddress (address , & chainParams )
358+ if err != nil {
359+ return nil , errors .Err (err )
360+ }
361+ amount , err := btcutil .NewAmount (claimAmount )
362+ if err != nil {
363+ return nil , errors .Err (err )
364+ }
365+ script , err := getClaimSupportPayoutScript (name , claimID , decodedAddress )
366+ if err != nil {
367+ return nil , errors .Err (err )
368+ }
369+ rawTx .AddTxOut (wire .NewTxOut (int64 (amount ), script ))
370+
371+ return c .SignTxAndSend (rawTx )
372+ }
0 commit comments