Skip to content

DECENTfoundation/DCorePHP-SDK

Repository files navigation

DCore SDK for PHP

Set of APIs for accessing the DCore Blockchain.
If you are looking for other platforms you can find info below.

Requirements

Instalation

composer.json

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/decentfoundation/dcorephp-sdk"
        }
    ],
    "require": {
        "decentfoundation/dcorephp-sdk": "dev-master"
    }
}
composer require decentfoundation/dcorephp-sdk

Usage

You can find example project with SDK usage here.

You can find developer documentation for latest release here.

DCore API initialization

$dcoreApi = new \DCorePHP\DCoreApi(
    'https://testnet.dcore.io/',
    'wss://testnet-socket.dcore.io'
);

Look at ./src/DCoreApi.php and ./src/Sdk/*Interface.php to see all available methods and their return values.

Get account

$account = $dcoreApi->getAccountApi()->get(new ChainObject('1.2.34'));
$account = $dcoreApi->getAccountApi()->getByName('Your test account name');

Create account

There are two ways to create account in DCore network: $dcoreApi->getAccountApi()->registerAccount() and $dcoreApi->getAccountApi()->createAccountWithBrainKey(). Recommended way to create account is using $dcoreApi->getAccountApi()->registerAccount() method, because it has an option to specify keys. You can use $dcoreApi->getAccountApi()->createAccountWithBrainKey(), but keys generated from $brainkey for $publicOwnerKeyWif, $publicActiveKeyWif and $publicMemoKeyWif will be the same, which is not recommended for security reasons.

$dcoreApi->getAccountApi()->registerAccount(
    'Your test account name',
    'DCT6MA5TQQ6UbMyMaLPmPXE2Syh5G3ZVhv5SbFedqLPqdFChSeqTz',
    'DCT6MA5TQQ6UbMyMaLPmPXE2Syh5G3ZVhv5SbFedqLPqdFChSeqTz',
    'DCT6MA5TQQ6UbMyMaLPmPXE2Syh5G3ZVhv5SbFedqLPqdFChSeqTz',
    new ChainObject('1.2.34'),
    '5Jd7zdvxXYNdUfnEXt5XokrE3zwJSs734yQ36a1YaqioRTGGLtn'
);

Create transfer

$dcoreApi->getAccountApi()->transfer(
    new Credentials(new ChainObject('1.2.34'), '5Jd7zdvxXYNdUfnEXt5XokrE3zwJSs734yQ36a1YaqioRTGGLtn'),
    '1.2.35',
    (new AssetAmount())->setAmount(1500000),
    'your secret message',
    false
);

Create content

$content = new SubmitContent();
$content
    ->setUri($randomUri)
    ->setCoauthors([])
    ->setCustodyData(null)
    ->setHash('2222222222222222222222222222222222222222')
    ->setKeyParts([])
    ->setSeeders([])
    ->setQuorum(0)
    ->setSize(10000)
    ->setSynopsis(json_encode([
        'title' => 'Your content title',
        'description' => 'Your content description',
        'content_type_id' => '1.2.3'
    ]))
    ->setExpiration('2019-05-28T13:32:34+00:00')
    ->setPrice([(new RegionalPrice)->setPrice((new AssetAmount())->setAmount(1000))->setRegion(1)]);

$credentials = new Credentials(
    new ChainObject('1.2.34'),
    ECKeyPair::fromBase58(DCoreSDKTest::PRIVATE_KEY_1)
);

$dcoreApi->getContentApi()->create(
    $content,
    $credentials,
    (new AssetAmount())->setAmount(1000)->setAssetId('1.3.0'),
    (new AssetAmount())->setAmount(1000)->setAssetId('1.3.0')
);

Search content

$contents = $dcoreApi->getContentApi()->findAll(
    'search term',
    '-rating'
);

NFT

NftModels require @Type("type") annotation for correct functioning. GMP library is also necessary when working with integers.

NftModel

class NftApple extends NftModel
{
    /**
     * @Type("integer")
     */
    public $size;
    /**
     * @Type("string")
     * @Unique
     */
    public $color;
    /**
     * @Type("boolean")
     * @Modifiable("both")
     */
    public $eaten;

    public function __construct($size, $color, $eaten)
    {
        $this->size = gmp_init($size);
        $this->color = $color;
        $this->eaten = $eaten;
    }
}

Create NFT

$credentials = new Credentials(new ChainObject('1.2.27'), ECKeyPair::fromBase58('DCT6MA5TQQ6UbMyMaLPmPXE2Syh5G3ZVhv5SbFedqLPqdFChSeqTz'));
$dcoreApi->getNftApi()->create($credentials, 'APPLE', 100, false, 'an apple', NftApple::class, true);

More examples can be found in ./tests/Sdk/NftApiTest.php.

Development requirements & recommendations

PHPStorm configuration

Development & testing

git clone git@github.com:decentfoundation/dcorephp-sdk.git
cd dcorephp-sdk
docker-compose up -d
docker-compose exec php composer install --dev --prefer-dist --optimize-autoloader
docker-compose exec php ./vendor/bin/phpunit --bootstrap vendor/autoload.php tests

Official DCore SDKs for other platforms