Bitcoin Forum
April 23, 2024, 06:45:14 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: PowerCoin -- A Powershell Wrapper for Bitcoin json-rpc  (Read 1241 times)
jagallout (OP)
Newbie
*
Offline Offline

Activity: 29
Merit: 0


View Profile
June 07, 2014, 05:27:12 AM
 #1

Hello All,

I am a hobbyist .Net developer and had been trying (unsuccessfully) to use the "Bitnet" project (http://sourceforge.net/projects/bitnet/) for a while.  I finally got fed up and decided to start from scratch, below you will find the "first-pass"/"proof of concept" implementation of some of the "more commonly" used bitcoind rpc calls.  Most of the work is in the string formatting, and you will still have to handle the json string that gets returned, but its a start, and hopefully someone will find it useful.

It makes use of Invoke-WebRequest command available in Powershell 4.0

Any input would be appreciated!  Feel free to use/distribute to your hearts content, I simply ask that any improvements or extensions make their way back to this thread.

Enjoy:
copy the following text into a new file and save it as PowerCoin.ps1

H07ZmHjToR9k3L6+FtInvboy3TQktffyrVKph2hRnhHmZwOu1zomf9kgVBThEaCLbo0Kb5VfSpesiTvmsCnNBiE= (Signed with my Tip Address)

Code:
##Title: PowerCoin
##Version: 0.01
##Date: 6/7/2014
##Author: jagallout
##Usage: It works best to dot source the .ps1 file (e.g. PS C:\[path to PowerCoin.ps1]> . .\PowerCoin.ps1 )
##This will prompt you for a username/password and for the Uri for the rpc server, then you can just call the methods by name (e.g. getinfo)
##Question: jagallout on bitcointalk.org
##Tips: 1GqrY1LSRD4N99LQn4ULhSSoJ79B7rtC6W


$cred = Get-Credential
$Uri = Read-Host "Specify RPC Server"

$p_jsonrpc = "`"jsonrpc`":2.0"
$p_id = "`"id`":1"

function execute
{

    param
    (
    $json
    );

    $result = Invoke-WebRequest -Uri $Uri -Method Post -ContentType "application/json-rpc" -Credential $cred -Body $json

    return $result.Content
}

function getInfo
{

    $json =
@"
{"method":"getinfo",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getblockcount
{

    $json =
@"
{"method":"getblockcount",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getbestblockhash
{

    $json =
@"
{"method":"",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getdifficulty
{

    $json =
@"
{"method":"getdifficulty",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getreceivedbyaddress
{

    Param
    (
    [string]$address,
    [int]$confirmations
    );

    $params = "[`"$address`",$confirmations]"
    
    $json =
@"
{"method":"getreceivedbyaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
    
}

function signmessage
{
    Param
    (
    [parameter(mandatory=$true)][string]$address,
    [parameter(mandatory=$true)][string]$message
    );

    $params = "[`"$address`",`"$message`"]"

    $json =
@"
"@

    return execute($json)
}

function verifymessage
{
    Param
    (
    [parameter(mandatory=$true)][string]$address,
    [parameter(mandatory=$true)][string]$signature,
    [parameter(mandatory=$true)][string]$message
    );

    $params = "[`"$address`",`"$signature`",`"$message`"]"
    
    $json =
@"
{"method":"verifymessage","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
    
}

function getbalance
{

    Param
    (
    [string]$account,
    [int]$confirmations
    );
  
    if (!$account) {$account = ""}
    if (!$confirmations) {$confirmations = 6}
    
    $params = "[`"$account`", $confirmations]"

    $json =
@"
{"method":"getbalance","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getaccount
{
    Param
    (
    [string]$account
    );

    $params = "[`"$account`"]"

    $json =
@"
{"method":"getaccount","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function getaccountaddress
{
    Param
    (
    [string]$account
    );
    
    $params = "[`"$account`"]"

    $json =
@"
{"method":"getaccountaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function dumpprivkey
{
    Param
    (
    [parameter(mandatory=$true)][string]$address
    );

    $params = "[`"$address`"]"

    $json =
@"
{"method":"dumpprivkey","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@
    
    return execute($json)
}

function getnewaddress
{
    Param
    (
    [string]$account
    );
    
    $params = "[`"$account`"]"

    $json =
@"
{"method":"getnewaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@
    return execute($json)
}

function gettransaction
{
    Param
    (
    [parameter(mandatory=$true)][string]$txid
    );

    $params = "[`"$txid`"]"

    $json =
@"
{"method":"gettransaction","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)

}
No Gods or Kings. Only Bitcoin
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1713897914
Hero Member
*
Offline Offline

Posts: 1713897914

View Profile Personal Message (Offline)

Ignore
1713897914
Reply with quote  #2

1713897914
Report to moderator
1713897914
Hero Member
*
Offline Offline

Posts: 1713897914

View Profile Personal Message (Offline)

Ignore
1713897914
Reply with quote  #2

1713897914
Report to moderator
1713897914
Hero Member
*
Offline Offline

Posts: 1713897914

View Profile Personal Message (Offline)

Ignore
1713897914
Reply with quote  #2

1713897914
Report to moderator
jayc89
Hero Member
*****
Offline Offline

Activity: 756
Merit: 500

CryptoTalk.Org - Get Paid for every Post!


View Profile
June 07, 2014, 09:09:44 AM
 #2

PowerShell, spew! Lol I've spent far too much time working with it recently - good work!

 
                                . ██████████.
                              .████████████████.
                           .██████████████████████.
                        -█████████████████████████████
                     .██████████████████████████████████.
                  -█████████████████████████████████████████
               -███████████████████████████████████████████████
           .-█████████████████████████████████████████████████████.
        .████████████████████████████████████████████████████████████
       .██████████████████████████████████████████████████████████████.
       .██████████████████████████████████████████████████████████████.
       ..████████████████████████████████████████████████████████████..
       .   .██████████████████████████████████████████████████████.
       .      .████████████████████████████████████████████████.

       .       .██████████████████████████████████████████████
       .    ██████████████████████████████████████████████████████
       .█████████████████████████████████████████████████████████████.
        .███████████████████████████████████████████████████████████
           .█████████████████████████████████████████████████████
              .████████████████████████████████████████████████
                   ████████████████████████████████████████
                      ██████████████████████████████████
                          ██████████████████████████
                             ████████████████████
                               ████████████████
                                   █████████
.CryptoTalk.org.|.MAKE POSTS AND EARN BTC!.🏆
jagallout (OP)
Newbie
*
Offline Offline

Activity: 29
Merit: 0


View Profile
June 10, 2014, 06:12:50 AM
 #3

Version 0.02 Signature: HzA9kY/zltEYsPO8QoZWn2BXNralYyIpjC42vKdSGQEzEIvqMNQej1+0dJKwZlBwgIodf2iYwv42wW2e7ZtrJ6c=

UPDATE
Code:
##Title: PowerCoin
##Version: 0.02
##Date: 6/10/2014
##Author: jagallout
##Usage: It works best to dot source the .ps1 file (e.g. PS C:\[path to PowerCoin.ps1]> . .\PowerCoin.ps1 )
##This will prompt you for a username/password and for the Uri for the rpc server, then you can just call the methods by name (e.g. getinfo)
##Question: jagallout on bitcointalk.org
##Tips: 1GqrY1LSRD4N99LQn4ULhSSoJ79B7rtC6W


$cred = Get-Credential
$Uri = Read-Host "Specify RPC Server"

$p_jsonrpc = "`"jsonrpc`":2.0"
$p_id = "`"id`":1"

$passwordFile = "~/powerCoin-info.txt"

function saveCredentials
{
    $kvp = ($cred.Username +"::::"+(ConvertFrom-SecureString $cred.Password))
    Set-Content -Path $passwordFile -Value $kvp
}

function loadCredentials
{
    if ([System.IO.File]::Exists($passwordFile))
    {
        $content = Get-Content $passwordFile
        $values = $content.Split("::::")
        $username = $values[0]
        $password = $values[1]
   
        $cred.Password = ConvertTo-SecureString $password
        $cred.Username = $username
    }
    else
    {
        $cred = Get-Credential
    }
}

function execute
{

    param
    (
    $json
    );

    $result = Invoke-WebRequest -Uri $Uri -Method Post -ContentType "application/json-rpc" -Credential $cred -Body $json

    return $result.Content
}

function getInfo
{

    $json =
@"
{"method":"getinfo",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getblockcount
{

    $json =
@"
{"method":"getblockcount",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getbestblockhash
{

    $json =
@"
{"method":"",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getdifficulty
{

    $json =
@"
{"method":"getdifficulty",$p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getreceivedbyaddress
{

    Param
    (
    [string]$address,
    [int]$confirmations
    );

    $params = "[`"$address`",$confirmations]"
   
    $json =
@"
{"method":"getreceivedbyaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
     
}

function signmessage
{
    Param
    (
    [parameter(mandatory=$true)][string]$address,
    [parameter(mandatory=$true)][string]$message
    );

    $params = "[`"$address`",`"$message`"]"

    $json =
@"
{"method":"signmessage","params":$($params.ToString()), $p_id, $P_jsonrpc}
"@

    return execute($json)
}

function verifymessage
{
    Param
    (
    [parameter(mandatory=$true)][string]$address,
    [parameter(mandatory=$true)][string]$signature,
    [parameter(mandatory=$true)][string]$message
    );

    $params = "[`"$address`",`"$signature`",`"$message`"]"
   
    $json =
@"
{"method":"verifymessage","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
     
}

function getbalance
{

    Param
    (
    [string]$account,
    [int]$confirmations
    );
   
    if (!$account) {$account = ""}
    if (!$confirmations) {$confirmations = 6}
   
    $params = "[`"$account`", $confirmations]"

    $json =
@"
{"method":"getbalance","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)

}

function getaccount
{
    Param
    (
    [string]$account
    );

    $params = "[`"$account`"]"

    $json =
@"
{"method":"getaccount","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function getaccountaddress
{
    Param
    (
    [string]$account
    );
   
    $params = "[`"$account`"]"

    $json =
@"
{"method":"getaccountaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function dumpprivkey
{
    Param
    (
    [parameter(mandatory=$true)][string]$address
    );

    $params = "[`"$address`"]"

    $json =
@"
{"method":"dumpprivkey","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@
   
    return execute($json)
}

function getnewaddress
{
    Param
    (
    [string]$account
    );
   
    $params = "[`"$account`"]"

    $json =
@"
{"method":"getnewaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@
    return execute($json)
}

function gettransaction
{
    Param
    (
    [parameter(mandatory=$true)][string]$txid
    );

    $params = "[`"$txid`"]"

    $json =
@"
{"method":"gettransaction","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)

}

function sendtoaddress #TODO: Test Functionality
{
    param
    (
        [parameter(mandatory=$true)][string]$address,
        [parameter(mandatory=$true)][decimal]$amount #api calls for "real", is decimal okay to use?
    );

    $params = "[`"$address`",$amount]"

    $json =
@"
{"method":"sendtoaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function setaccount
{
    param
    (
        [parameter(mandatory=$true)][string]$address,
        [parameter(mandatory=$true)][string]$account
    );

    $params = "[`"$address`",`"$account`"]"

    $json =
@"
{"method":"setaccount","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function setgenerate
{
    param
    (
        [parameter(mandatory=$true)][bool]$enable,
        [parameter(mandatory=$false)][int]$proclimit
    );
    if ($enable) {$enableText = "true"}else{$enableText = "false"}
    if (!$proclimit){$proclimit = -1}

    $params = "[`"$enableText`",$proclimit]"

    $json =
@"
{"method":"setgenerate","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function settxfee
{
    param
    (
        [parameter(mandatory=$true)][decimal]$fee #api calls for "real", is decimal okay to use?
    );

    $params = "[`"$fee`"]"

    $json =
@"
{"method":"settxfee","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function stop
{
    $json =
@"
{"method":"stop", $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function validateaddress
{
    param
    (
        [parameter(mandatory=$true)][string]$address
    );

    $params = "[`"$address`"]"

    $json =
@"
{"method":"validateaddress","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function walletlock
{
    $json =
@"
{"method":"walletlock", $p_id, $p_jsonrpc}
"@
    return execute($json)
}

function walletpassphrase
{
    param
    (
        [parameter(mandatory=$true)][string]$passphrase,
        [parameter(mandatory=$true)][int]$timeout
    );

    $params = "[`"$passphrase`", $timeout]"

    $json =
@"
{"method":"walletpassphrase","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}

function walletpassphrasechange
{
    param
    (
        [parameter(mandatory=$true)][string]$old,
        [parameter(mandatory=$true)][string]$new
    );

    $params = "[`"$old`", `"$new`"]"

    $json =
@"
{"method":"walletpassphrasechange","params":$($params.ToString()), $p_id, $p_jsonrpc}
"@

    return execute($json)
}
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!