@@ -833,3 +833,122 @@ func TestWalletReset(t *testing.T) {
833
833
t .Error ("wallet is not unlocked" )
834
834
}
835
835
}
836
+
837
+ func TestWalletSiafunds (t * testing.T ) {
838
+ if testing .Short () {
839
+ t .SkipNow ()
840
+ }
841
+ t .Parallel ()
842
+
843
+ walletPassword := "testpass"
844
+ key := crypto .TwofishKey (crypto .HashObject (walletPassword ))
845
+ testdir := build .TempDir ("api" , t .Name ())
846
+ st , err := assembleServerTester (key , testdir )
847
+ if err != nil {
848
+ t .Fatal (err )
849
+ }
850
+ defer st .server .Close ()
851
+
852
+ // mine some money
853
+ for i := types .BlockHeight (0 ); i <= types .MaturityDelay ; i ++ {
854
+ _ , err := st .miner .AddBlock ()
855
+ if err != nil {
856
+ t .Fatal (err )
857
+ }
858
+ }
859
+
860
+ // record transactions
861
+ var wtg WalletTransactionsGET
862
+ err = st .getAPI ("/wallet/transactions?startheight=0&endheight=100" , & wtg )
863
+ if err != nil {
864
+ t .Fatal (err )
865
+ }
866
+ numTxns := len (wtg .ConfirmedTransactions )
867
+
868
+ // load siafunds into the wallet
869
+ siagPath , _ := filepath .Abs ("../types/siag0of1of1.siakey" )
870
+ loadSiagValues := url.Values {}
871
+ loadSiagValues .Set ("keyfiles" , siagPath )
872
+ loadSiagValues .Set ("encryptionpassword" , walletPassword )
873
+ err = st .stdPostAPI ("/wallet/siagkey" , loadSiagValues )
874
+ if err != nil {
875
+ t .Fatal (err )
876
+ }
877
+
878
+ err = st .getAPI ("/wallet/transactions?startheight=0&endheight=100" , & wtg )
879
+ if err != nil {
880
+ t .Fatal (err )
881
+ }
882
+ if len (wtg .ConfirmedTransactions ) != numTxns + 1 {
883
+ t .Errorf ("expected %v transactions, got %v" , numTxns + 1 , len (wtg .ConfirmedTransactions ))
884
+ }
885
+
886
+ // check balance
887
+ var wg WalletGET
888
+ err = st .getAPI ("/wallet" , & wg )
889
+ if err != nil {
890
+ t .Fatal (err )
891
+ }
892
+ if wg .SiafundBalance .Cmp64 (2000 ) != 0 {
893
+ t .Fatalf ("bad siafund balance: expected %v, got %v" , 2000 , wg .SiafundBalance )
894
+ }
895
+
896
+ // spend the siafunds into the wallet seed
897
+ var wag WalletAddressGET
898
+ err = st .getAPI ("/wallet/address" , & wag )
899
+ if err != nil {
900
+ t .Fatal (err )
901
+ }
902
+ sendSiafundsValues := url.Values {}
903
+ sendSiafundsValues .Set ("amount" , "2000" )
904
+ sendSiafundsValues .Set ("destination" , wag .Address .String ())
905
+ err = st .stdPostAPI ("/wallet/siafunds" , sendSiafundsValues )
906
+ if err != nil {
907
+ t .Fatal (err )
908
+ }
909
+
910
+ // Announce the host and form an allowance with it. This will result in a
911
+ // siafund claim.
912
+ err = st .announceHost ()
913
+ if err != nil {
914
+ t .Fatal (err )
915
+ }
916
+ err = st .setHostStorage ()
917
+ if err != nil {
918
+ t .Fatal (err )
919
+ }
920
+ err = st .acceptContracts ()
921
+ if err != nil {
922
+ t .Fatal (err )
923
+ }
924
+ // mine a block so that the announcement makes it into the blockchain
925
+ _ , err = st .miner .AddBlock ()
926
+ if err != nil {
927
+ t .Fatal (err )
928
+ }
929
+
930
+ // form allowance
931
+ allowanceValues := url.Values {}
932
+ testFunds := "10000000000000000000000000000" // 10k SC
933
+ testPeriod := "20"
934
+ allowanceValues .Set ("funds" , testFunds )
935
+ allowanceValues .Set ("period" , testPeriod )
936
+ err = st .stdPostAPI ("/renter" , allowanceValues )
937
+ if err != nil {
938
+ t .Fatal (err )
939
+ }
940
+
941
+ // mine a block so that the file contract makes it into the blockchain
942
+ _ , err = st .miner .AddBlock ()
943
+ if err != nil {
944
+ t .Fatal (err )
945
+ }
946
+ // wallet should now have a claim balance
947
+ err = st .getAPI ("/wallet" , & wg )
948
+ if err != nil {
949
+ t .Fatal (err )
950
+ }
951
+ if wg .SiacoinClaimBalance .IsZero () {
952
+ t .Fatal ("expected non-zero claim balance" )
953
+ }
954
+ }
0 commit comments