# Changes to Peerplaysjs-lib

Following changes have been made to the peerplaysjs-lib:

1. **ChainTypes.js**
   1. Add the following missing object types to the `object_type` constant: `son: 27,  son_proposal: 28,  son_wallet: 29,  son_wallet_deposit: 30,  son_wallet_withdraw: 31,  sidechain_address: 32,  sidechain_transaction: 33`
   2. Add the following missing implementation object types to the `impl_object_type` constant: `son_statistics: 24,  son_schedule: 25`
   3. Add the following missing operations in `operations` constant: `son_create: 82,  son_update: 83,  son_delete: 84,  son_heartbeat: 85,  son_report_down: 86,  son_maintenance: 87,  son_wallet_recreate: 88,  son_wallet_update: 89,  son_wallet_deposit_create: 90,  son_wallet_deposit_process: 91,  son_wallet_withdraw_create: 92,  son_wallet_withdraw_process: 93,  sidechain_address_add: 94,  sidechain_address_update: 95,  sidechain_address_delete: 96,  sidechain_transaction_create: 97,  sidechain_transaction_sign: 98,  sidechain_transaction_send: 99,  sidechain_transaction_settle: 100`
2. operations.js 1. Add the following missing fee parameters:

   `const son_create_operation_fee_parameters = new Serializer(`  \
   `'son_create_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_update_operation_fee_parameters = new Serializer(`  \
   `'son_update_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_delete_operation_fee_parameters = new Serializer(`  \
   `'son_delete_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_heartbeat_operation_fee_parameters = new Serializer(`  \
   `'son_heartbeat_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_report_down_operation_fee_parameters = new Serializer(`  \
   `'son_report_down_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_maintenance_operation_fee_parameters = new Serializer(`  \
   `'son_maintenance_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_wallet_recreate_operation_fee_parameters = new Serializer(`  \
   `'son_wallet_recreate_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_wallet_update_operation_fee_parameters = new Serializer(`  \
   `'son_wallet_update_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const son_wallet_deposit_create_operation_fee_parameters = new Serializer(`  \
   `'son_wallet_deposit_create_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const son_wallet_deposit_process_operation_fee_parameters = new Serializer(`  \
   `'son_wallet_deposit_process_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const son_wallet_withdraw_create_operation_fee_parameters = new Serializer(`  \
   `'son_wallet_withdraw_create_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const son_wallet_withdraw_process_operation_fee_parameters = new Serializer(`  \
   `'son_wallet_withdraw_process_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`  \
   `const sidechain_address_add_operation_fee_parameters = new Serializer(`  \
   `'sidechain_address_add_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const sidechain_address_update_operation_fee_parameters = new Serializer(`  \
   `'sidechain_address_update_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const sidechain_address_delete_operation_fee_parameters = new Serializer(`  \
   `'sidechain_address_delete_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const sidechain_transaction_create_operation_fee_parameters = new Serializer(`  \
   `'sidechain_transaction_create_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const sidechain_transaction_sign_operation_fee_parameters = new Serializer(`  \
   `'sidechain_transaction_sign_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const sidechain_transaction_send_operation_fee_parameters = new Serializer(`  \
   `'sidechain_transaction_send_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   `const sidechain_transaction_settle_operation_fee_parameters = new Serializer(`  \
   `'sidechain_transaction_settle_operation_fee_parameters',`  \
   `{`  \
   `fee: uint64`  \
   `}`  \
   `);`

   1. Add these fee parameters to the `fee_parameters` constant: `son_create_operation_fee_parameters, son_update_operation_fee_parameters, son_delete_operation_fee_parameters, son_heartbeat_operation_fee_parameters, son_report_down_operation_fee_parameters, son_maintenance_operation_fee_parameters, son_wallet_recreate_operation_fee_parameters, son_wallet_update_operation_fee_parameters, son_wallet_deposit_create_operation_fee_parameters, son_wallet_deposit_process_operation_fee_parameters, son_wallet_withdraw_create_operation_fee_parameters, son_wallet_withdraw_process_operation_fee_parameters, sidechain_address_add_operation_fee_parameters, sidechain_address_update_operation_fee_parameters, sidechain_address_delete_operation_fee_parameters, sidechain_transaction_create_operation_fee_parameters, sidechain_transaction_sign_operation_fee_parameters, sidechain_transaction_send_operation_fee_parameters, sidechain_transaction_settle_operation_fee_parameters`
   2. Add missing fields to `parameter_extensions` constant: `gpos_period: optional(uint32),  gpos_subperiod: optional(uint32),  gpos_period_start: optional(uint32),  gpos_vesting_lockin_period: optional(uint32),  son_vesting_amount: optional(uint32),  son_vesting_period: optional(uint32),  son_pay_max: optional(uint32),  son_pay_time: optional(uint32),  son_deregister_time: optional(uint32),  son_heartbeat_frequency: optional(uint32),  son_down_time: optional(uint32),  son_bitcoin_min_tx_confirmations: optional(uint16),  son_account: optional(protocol_id_type('account')),  btc_asset: optional(protocol_id_type('asset'))`
   3. Add a new serializer for `dormant_vesting_balance_initializer` and add it to the constant `vesting_policy_initializer`: `const dormant_vesting_policy_initializer = new Serializer('dormant_vesting_policy_initializer', {});`
   4. Add 'son' to `vesting_balance_type` enum serializer: `const vesting_balance_type = enumeration([ 'normal', 'gpos', 'son' ]);`
   5. Add the following missing operation serializers:\
      `const sidechain_type = enumeration([`  \
      `'unknown',`  \
      `'bitcoin',`  \
      `'ethereum',`  \
      `'eos',`  \
      `'peerplays'`  \
      `]);`

      `const son_create = new Serializer('son_create', {`  \
      `fee: asset,`  \
      `owner_account: protocol_id_type('account'),`  \
      `url: string,`  \
      `deposit: protocol_id_type('vesting_balance'),`  \
      `signing_key: public_key,`  \
      `sidechain_public_keys: map(sidechain_type, string),`  \
      `pay_vb: protocol_id_type('vesting_balance')`  \
      `});`

      `const son_update = new Serializer('son_update', {`  \
      `fee: asset,`  \
      `son_id: protocol_id_type('son'),`  \
      `owner_account: protocol_id_type('account'),`  \
      `new_url: optional(string),`  \
      `new_deposit: optional(protocol_id_type('vesting_balance')),`  \
      `new_signing_key: optional(public_key),`  \
      `new_sidechain_public_keys: optional(map(sidechain_type, string)),`  \
      `new_pay_vb: optional(protocol_id_type('vesting_balance'))`  \
      `});`

      `const son_delete = new Serializer('son_delete', {`  \
      `fee: asset,`  \
      `son_id: protocol_id_type('son'),`  \
      `payer: protocol_id_type('account'),`  \
      `owner_account: protocol_id_type('account')`  \
      `});`

      `const son_heartbeat = new Serializer('son_heartbeat', {`  \
      `fee: asset,`  \
      `son_id: protocol_id_type('son'),`  \
      `owner_account: protocol_id_type('account'),`  \
      `ts: time_point_sec`  \
      `});`

      `const son_report_down = new Serializer('son_report_down', {`  \
      `fee: asset, son_id: protocol_id_type('son'),`  \
      `payer: protocol_id_type('account'),`  \
      `down_ts: time_point_sec`  \
      `});`

      `const son_maintenance_request_type = enumeration([`  \
      `'request_maintenance',`  \
      `'cancel_request_maintenance'`  \
      `]);`

      `const son_maintenance = new Serializer('son_maintenance', {`  \
      `fee: asset,`  \
      `son_id: protocol_id_type('son'),`  \
      `owner_account: protocol_id_type('account'),`  \
      `request_type: son_maintenance_request_type`  \
      `});`

      `const son_info = new Serializer('son_info', {`  \
      `son_id: protocol_id_type('son'),`  \
      `weight: uint16,`  \
      `signing_key: public_key,`  \
      `sidechain_public_keys: map(sidechain_type, string)`  \
      `});`

      `const son_wallet_recreate = new Serializer('son_wallet_recreate', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `sons: set(son_info) });`

      `const son_wallet_update = new Serializer('son_wallet_update', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `son_wallet_id: protocol_id_type('son_wallet'),`  \
      `sidechain: sidechain_type,`  \
      `address: string`  \
      `});`

      `const son_wallet_deposit_create = new Serializer('son_wallet_deposit_create', {`  \
      `fee: asset, payer: protocol_id_type('account'),`  \
      `son_id: protocol_id_type('son'),`  \
      `timestamp: time_point_sec,`  \
      `block_num: uint32,`  \
      `sidechain: sidechain_type,`  \
      `sidechain_uid: string,`  \
      `sidechain_transaction_id: string,`  \
      `sidechain_from: string,`  \
      `sidechain_to: string,`  \
      `sidechain_currency: string,`  \
      `sidechain_amount: int64,`  \
      `peerplays_from: protocol_id_type('account'),`  \
      `peerplays_to: protocol_id_type('account'),`  \
      `peerplays_asset: asset`  \
      `});`

      `const son_wallet_deposit_process = new Serializer('son_wallet_deposit_process', {`  \
      `fee: asset, payer: protocol_id_type('account'),`  \
      `son_wallet_deposit_id: protocol_id_type('son_wallet_deposit')`  \
      `});`

      `const son_wallet_withdraw_create = new Serializer('son_wallet_withdraw_create', {`  \
      `fee: asset, payer: protocol_id_type('account'),`  \
      `son_id: protocol_id_type('son'),`  \
      `timestamp: time_point_sec,`  \
      `block_num: uint32,`  \
      `sidechain: sidechain_type,`  \
      `peerplays_uid: string,`  \
      `peerplays_transaction_id: string,`  \
      `peerplays_from: protocol_id_type('account'),`  \
      `peerplays_asset: asset,`  \
      `withdraw_sidechain: sidechain_type,`  \
      `withdraw_address: string,`  \
      `withdraw_currency: string,`  \
      `withdraw_amount: int64`  \
      `});`

      `const son_wallet_withdraw_process = new Serializer('son_wallet_withdraw_process', {`  \
      `fee: asset, payer: protocol_id_type('account'),`  \
      `son_wallet_withdraw_id: protocol_id_type('son_wallet_withdraw')`  \
      `});`

      `const sidechain_address_add = new Serializer('sidechain_address_add', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `sidechain_address_account: protocol_id_type('account'),`  \
      `sidechain: sidechain_type,`  \
      `deposit_public_key: string,`  \
      `deposit_address: string,`  \
      `deposit_address_data: string,`  \
      `withdraw_public_key: string,`  \
      `withdraw_address: string`  \
      `});`

      `const sidechain_address_update = new Serializer('sidechain_address_update', {`  \
      `fee: asset, payer: protocol_id_type('account'),`  \
      `sidechain_address_id: protocol_id_type('sidechain_address'),`  \
      `sidechain_address_account: protocol_id_type('account'),`  \
      `sidechain: sidechain_type,`  \
      `deposit_public_key: optional(string),`  \
      `deposit_address: optional(string),`  \
      `deposit_address_data: optional(string),`  \
      `withdraw_public_key: optional(string),`  \
      `withdraw_address: optional(string)`  \
      `});`

      `const sidechain_address_delete = new Serializer('sidechain_address_delete', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `sidechain_address_id: protocol_id_type('sidechain_address'),`  \
      `sidechain_address_account: protocol_id_type('account'),`  \
      `sidechain: sidechain_type`  \
      `});`

      `const sidechain_transaction_create = new Serializer('sidechain_transaction_create', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `sidechain: sidechain_type,`  \
      `object_id: protocol_id_type('object'),`  \
      `transaction: string, signers: set(son_info)`  \
      `});`

      `const sidechain_transaction_sign = new Serializer('sidechain_transaction_sign', {`  \
      `fee: asset,`  \
      `signer: protocol_id_type('son'),`  \
      `payer: protocol_id_type('account'),`  \
      `sidechain_transaction_id: protocol_id_type('sidechain_transaction'),`  \
      `signature: string`  \
      `});`

      `const sidechain_transaction_send = new Serializer('sidechain_transaction_send', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `sidechain_transaction_id: protocol_id_type('sidechain_transaction'),`  \
      `signature: string`  \
      `});`

      `const sidechain_transaction_settle = new Serializer('sidechain_transaction_settle', {`  \
      `fee: asset,`  \
      `payer: protocol_id_type('account'),`  \
      `sidechain_transaction_id: protocol_id_type('sidechain_transaction')`  \
      `});`
   6. Add the missing operations in `st_operations`: `son_create, son_update, son_delete, son_heartbeat, son_report_down, son_maintenance, son_wallet_recreate, son_wallet_update, son_wallet_deposit_create, son_wallet_deposit_process, son_wallet_withdraw_create, son_wallet_withdraw_process, sidechain_address_add, sidechain_address_update, sidechain_address_delete, sidechain_transaction_create, sidechain_transaction_sign, sidechain_transaction_send, sidechain_transaction_settle`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devs.peerplays.com/supporting-and-reference-docs/sidechain-operator-node-development/generic-sidechain-docs/changes-to-peerplaysjs-lib.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
